中间件是介于request 和 response 处理之间的一道处理过程,用于全局范围改变Django的输入和输出,简单的来说中间件是帮助我们在视图函数指向之前和执行之后都可以做一些额外的操作。举个例子:可以用来在访问网站之前,检查访问的ip地址是否频繁,如果频繁就阻止访问。
Django自定义中间件
继承自MiddlewareMixin。MiddlewareMixin里面实现了4个方法,自定义中间件时,只要重写这4个方法即可。
#方法一、处理请求之前:在request对象产生之后,url匹配之前调用,返回None或者HttpResponse
def process_request(self,request):
pass
#方法二、处理视图之前:url匹配之后,视图函数调用之前调用,返回None或者HttpResponse对象
def process_view(self,request,view_func,*view_args,**view_kwargs):
pass
#方法三、处理响应之后:视图函数调用之后,所有的响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象。
def process_response(self,request,response):
pass
#方法四、异常处理:当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
def process_exception(self,exception):
pass
举个例子:
#在项目文件夹下创建middleware.py文件,添加如下代码:
try:
from django.utils.deprecation import MiddlewareMixin #Django1.10x
except ImportError:
MiddlewareMixin=object #大于1.10x
class mymiddleware(MiddlewareMixin):
def __init__(self):
print('init=====')
def process_request(self,request):
print('request=====')
def process_view(self,request,view_func,*view_args,**view_kwargs):
print('view=======')
def process_response(self,request,response):
print('response==')
return response
#在setting文件MIDDLEWARE_CLASSES中注册middleware:
'middleware.mymiddleware'
#然后修改views.py中的index
def index(request):
print('==========index======')
return render(request,'index.html')
#运行服务器后输出
>>> --------------init
>>> --------------request
>>> --------------view
>>> ======index======
>>> --------------response
#再次刷新输出
>>> --------------request
>>> --------------view
>>> ======index======
>>> --------------response