1 中间件
-是什么?
中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能
-怎么用:
-自定义中间件:
1 写一个类,继承MiddlewareMixin,
2 在类中写方法:
process_request
3 在settings中配置
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import render, HttpResponse
class mymiddleware1(MiddlewareMixin):
def process_request(self, request):
# print(request.path)
# print(type(request))
# request.aa='lqz'
print('我是middle1的process_request方法')
# 一旦returnHttpResponse对象,直接返回
# return HttpResponse('我返回了')
def process_response(self, request, response):
# request就是请求对象
# response就是响应对象
print('我是middle1的process_response方法')
# response.set_cookie('name','lqz')
return response
def process_view(self, request, callback, callback_args, callback_kwargs):
# callback 是要执行的视图函数地址
# callback_args是要执行的视图函数的位置参数(元组)
# callback_kwargs是要执行的视图函数的关键字参数(字典)
# print(type(callback))
# print(callback_args)
# print(callback_kwargs)
# response=callback(request,*callback_args,**callback_kwargs)
print('我是middle1的process_view方法')
# 如果返回response,后面的process_view就不执行了,直接执行中间件的process_response方法
# return response
def process_exception(self, request, exception):
#exception 异常对象
print('我是m1的process_exception方法')
class mymiddleware2(MiddlewareMixin):
def process_request(self, request):
# print(request.path)
# print(type(request))
print('我是middle2的process_request方法')
def process_response(self, request, response):
print('我是middle2的process_response方法')
return response
def process_view(self, request, callback, callback_args, callback_kwargs):
print('我是middle2的process_view方法')
# 只有视图函数抛异常,才执行
def process_exception(self, request, exception):
print('我是m2的process_exception方法')
print(str(exception))
return HttpResponse('您的操作有误')
def process_template_response(self, request, response):
print('我是m2的process_template_response')
return response
-5个方法(process_request,process_response)
-如果process_request方法返回HttpResponse的对象,请求直接返回,按中间件方法执行顺序往回走
2 csrf
xss攻击/csrf或xsrf跨站请求伪造
使用:中间件不注释,form表单中写{% csrf_token %}