中间件的应用

流程

客户端发起请求 –> 进到wsgi(模型) –> 中间件(request_process) –> 路由(urls.py) –> 中间件(view_process) –> view(视图操作 -> orm操作 -> mysql ) –> 中间件(process_response before_template) –> wsgi(模型)

在Python项目中一直都在有使用中间件,在django项目中的setting.py文件中看到MIDDLEWARE配置项

1
2
#加载自定义中间件   文件夹名.文件名.类名
'myapp.md_user.MyMiddleware'

导入

1
from django.utils.deprecation import MiddlewareMixin

中间件的四种方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 自定义中间件
class MyMiddleware(MiddlewareMixin):
# 请求之前
def process_request(self,request):
print("过滤中间件")
# 获取路由
if request.path_info.startswith("/login"):
return HttpResponse(json.dumps({'msg':'您篡改了id'},ensure_ascii=False,indent=4),
content_type='application/json')
# 进入视图之前
def process_view(self,request,view_func,view_args,view_kwargs):
# request是httprequest对象。

# view_func是即将使用的视图函数,它是实际的函数对象,而不是函数的名称作为字符串。

# view_args是将传递给视图位置的参数的列表。

# view_kargs是将传递给视图的关键字参数的字典。

# view_args和view_kargs都不包含第一个视图参数(request)
# 异常捕获方法
def process_exception(self,request,exception):
pass
# 返回之前
def process_response(self,request,response):
return response

​ 1.中间件的process_request方法是在执行视图函数之前执行的

​ 2.当配置中间件时,会按照MIDDLEWARE的注册顺序,也就是列表的索引值,从前到后依次执行的。

​ 3.不同中间件之间传递的request都是同一个对象。

中间件的应用场景

1.做IP限制 –> 放在中间件类的列表中,阻止某些ip访问;

2.URL访问过滤 –> 如果用户访问的是logo视图(放过)如果访问其他视图,需要检测是否已经有session或localstrage,已经有了放行,如果没有返回login,这样就省的在多个视图函数上写装饰器了!

原文地址:https://www.cnblogs.com/anle123/p/13365507.html