Django内置了一些中间件函数,方便我们在不同的时机,做一些相对的处理。
由于我是做前端的,学了中间件感觉跟vue中的生命周期钩子有些类似。
首先要做的是:在应用文件夹下新建一个 middleware.py 文件,我是跟views.py放在同一个目录
![](https://img.haomeiwen.com/i13723723/2e491d5028ccd67a.png)
在新创建的文件中定义一个类,继承object
class BlockMiddleware(object):
'''中间件类'''
def __init__(self):
print('-'*20)
print('init函数调用,是在接收第一个请求时')
def process_request(self,request):
print('-' * 20)
print('process_request函数调用,是在产生request对象之后,url匹配之前')
def process_view(self,request,view_func,*view_args,**view_kwargs):
print('-' * 20)
print('process_view函数调用,是在url配置调用之后,视图调用之前')
def process_response(self,request,response):
print('-' * 20)
print('process_response函数调用,是在视图函数调用之后,内容返回浏览器之前')
return response
然后在settings.py文件下注册刚刚写的类
![](https://img.haomeiwen.com/i13723723/b9b4dcf5b85ff8b0.png)
接下来运行程序会发现函数被依次调用
![](https://img.haomeiwen.com/i13723723/4aeaabf30917b8d6.png)
注意点:
from django.http import HttpResponse
class BlockMiddleware(object):
'''中间件类'''
def __init__(self):
print('-'*20)
print('init函数调用,是在接收第一个请求时')
def process_request(self,request):
# 需要注意的是如果这里被return 那么django接下来会忽略url配置、process_view与调用view
# 直接跳到 process_response 函数去执行
print('-' * 20)
print('process_request函数调用,是在产生request对象之后,url匹配之前')
return HttpResponse('<p>跳出</p>')
def process_view(self,request,view_func,*view_args,**view_kwargs):
# 需要注意的是如果这里被return 那么django不会调用view
# 直接跳到 process_response 函数去执行
print('-' * 20)
print('process_view函数调用,是在url配置调用之后,view视图调用之前')
def process_response(self,request,response):
print('-' * 20)
print('process_response函数调用,是在视图函数调用之后,内容返回浏览器之前')
return response
这里修改了process_request函数,return了一个p标签。
然后可以看到,输出顺序和页面的显示都发送了变化:
![](https://img.haomeiwen.com/i13723723/a06b5e9865e5243d.png)
![](https://img.haomeiwen.com/i13723723/f25032de904932e6.png)
网友评论