中间件的应用

Posted anle123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中间件的应用相关的知识,希望对你有一定的参考价值。

流程

客户端发起请求 –> 进到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,这样就省的在多个视图函数上写装饰器了!

以上是关于中间件的应用的主要内容,如果未能解决你的问题,请参考以下文章

ruby 如果你想在heroku上为你的中间人应用程序添加基本身份验证,这是一个添加到middleman的config.ru文件的片段

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]

在片段中添加上滑面板

Sublime Text3自定义代码片段

如何更新所有片段? onProgressUpdate 不更新所有片段

无法更新 View Pager 中的中间片段。