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'
posted @ 2021-06-17 22:29  黑影Poco  阅读(71)  评论(0)    收藏  举报