15、Django中间件
一、中间件
在学习中间件之前,我们来看一下之前画过的Django请求生命周期图

还记得我们之前发送post请求的时候,都需要在发送请求之前把 settings 中的一条命令给注释掉。其实这条语句是中间件之一。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
默认的中间件有七个,我们之前都是把第四个给注释掉了。
我们从Django请求生命周期图的流程来看,浏览器发送请求一直到了Django中间件这里,需要依次满足每一个中间件,然后才能进入路由层,最后出来的时候也要经过每一个中间件,这次的顺序是反着来。只要这过程中有一个中间件不满足,给你拦下了,那么你的请求都会失败。
DJango支持我们自定义中间件,并且提供了五个自定义的方法。
# 必须要掌握的的方法
process_request
'''
1.请求来的时候 会从上往下依次经过每一个中间件里面process_request方法,
2.如果中间件里没有定义该方法,那么直接跳过执行下一个中间件,
3.如果该方法返回了HttpResponse对象,那么请求就不再往后执行了,而是原路返回,
(process_request方法就是用来做全局相关的所有限制功能)
'''
def process_request(self,request):
print('我是第一个自定义中间件里面的process_request方法')
return HttpResponse("我是第一个自定义中间件里面的HttpResponse对象返回值") # 直接原地返回
process_response
'''
1.响应走的时候,会从下往上依次进过每一个中间件里面的process_response,该方法又两个额外参数request,response
2.该方法必须返回一个HttpResponse对象
3.如果中间件里没有定义该方法,那么直接跳过执行下一个中间件
'''
def process_response(self,request,response): # response就是要返回给用户的数据
print("我是第一个自定义中间件里面的process_response方法")
return response
###########################################################################
# 了解即可的的方法(最好能说出来)
process_view:路由匹配成功之后执行视图函数之前触发
process_exception:当视图函数出现异常(bug)的时候自动触发
process_template_response:当视图函数执行完毕之后并且返回的对象中含有render方法的情况下才会触发
二、如何自定义中间件
'''
1.在项目名或应用名下车间任意名称的文件夹
2.在该文件夹内车间一个任意名称的py文件
3.在该py文件内需要书写 类(类必须继承MiddlewareMixin)
然后在这个类里就可以自定义五个方法
4.需要将类的路径以字符串的形式注册到配置文件中才能生效
就是之前七个中间件的那个地方
'''
写中间件示例
# 1、在应用文件夹下创建mymiddleware文件夹,再在mymiddleware文件夹下参加nmydd.py
# 2、然后再在mydd下 写类,继承MiddlewareMixin,然后使用process_request方法
class MyMiddleware(MiddlewareMixin)
def process_request(self,request):
print('我是第一个自定义中间件里面的process_request方法')
注册中间件
# 然后去settings文件下注册
'app01.mymiddleware.mydd.MiddlewareMixin'

浙公网安备 33010602011771号