django中间件
django自带7个中间件,每个中间件都有各自的功能,还支持自定义中间件并且提供5个可以自定义的方法
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',
# 自定义中间件
# 'app02.mymiddleware.mymidware.MyWare1',
# 'app02.mymiddleware.mymidware.JsonMiddleware',
]
process_request(self, request):
'''
1.请求来的时候,需要按照中间件在配置文件中注册的顺序,
从上到下经过每一个中间件里面的process_request方法,
2.如果某个中间件里面没有定义process_request方法,则会跳过这个中间件
3.如果该方法返回了HttpResponse对象,那么请求将不再往后执行,而是直接原路返回
process_request方法就是用来做全局相关的所有限制功能
'''
#response参数是django后端返回给浏览器的内容
process_response(self, request, response):
'''
1.响应走的时候,需要按中间件在照配置文件中注册的顺序,
从下往上经过每一个中间件里面的process_response方法,
2.如果某个中间件里面没有定义process_response方法,则会跳过这个中间件
3.该方法必须返回一个HttpResponse对象,默认返回形参response,也可以自定义返回内容
'''
'''
flask框架也有一个中间件,只要返回了数据就必须经过所有中间件里面的类似于process_response方法
'''
'''
了解
process_view在路由匹配成功之后视图函数执行之前执行,顺序从下往上
process_excepton在视图函数中出现异常的情况下触发,顺序从下往上
'''
只要是涉及到全局相关的功能都可以使用中间件方便的完成
全局用户身份校验
全局用户权限校验
全局访问频率校验
如何自定义中间件
-
在项目名或者应用名下创建一个任意名称的文件夹
-
在该文件夹内创建一个任意名称的py文件
-
在该文件内写类,这个类必须继续MiddlewareMixin,然后在这个类里面就可以自定义那5个方法了,用几个定义几个
-
将类的路径以字符串的形式注册到配置文件中才能生效
#注册格式:应用名.文件夹名.py文件名.类名 'app02.mymiddleware.mymidware.MyWare1'
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse
import json
class MyWare1(MiddlewareMixin):
def process_request(self, request):
print('第一个自定义中间件的process_request')
def process_response(self, request, response):
print('第一个自定义中间件的process_response')
return response
def process_view(self,request,*args,**kwargs):
print('第一个自定义中间件的process_view')
def process_exception(self,request,exception):
print(exception)
'''
这个自定义中间件的作用:前端通过ajax以post方式提交json格式数据时,后端可以直接通过request.data来取键值对数据,不用每次都手动反序列化
'''
class JsonMiddleware(MiddlewareMixin):
def process_request(self, request):
try:
request.data=json.loads(request.body)
except Exception as e:
request.data =request.POST
浙公网安备 33010602011771号