Django 中间件 请求前
程序员文章站
2022-04-14 17:08:42
中间件: 正常调用顺序是从上往下,但如注册了多个中间件类中包含 process_exception函数的时候,process_exception函数调用的顺序跟注册的顺序是相反的,下面两张图说明: 流程图: 注意:process_response之前的中间件如无返回,则默认返回 None,会继续执行 ......
中间件:
class testmiddleware(object): """中间件类""" def __init__(self): """服务器重启之后,接收第一个请求时调用""" pass def process_request(self, request): """产生request对象之后,url匹配之前调用""" pass def process_view(self, request, view_func, *view_args, **view_kwargs): """url匹配之后,视图函数调用之前调用""" pass def process_exception(self, request, exception): """视图函数发生异常时调用""" pass def process_response(self, request, response): """视图函数调用之后,内容返回浏览器之前调用""" return response
正常调用顺序是从上往下,但如注册了多个中间件类中包含 process_exception函数的时候,process_exception函数调用的顺序跟注册的顺序是相反的,下面两张图说明:
流程图:
注意:process_response之前的中间件如无返回,则默认返回 none,会继续执行下一个中间件,但如有返回,则直接跳到 process_response中间件
例子:
1.
在app内新建一个 middleware.py 文件
2.
from django.http import httpresponse class blacklistipsmiddleware(object): """中间件类""" exclude_ips = ['192.168.1.1'] def process_view(self, request, view_func, *view_args, **view_kwargs): """视图函数调用之前会调用""" user_ip = request.meta['remote_addr'] # 获取访问用户的ip if user_ip in blacklistipsmiddleware.exclude_ips: return httpresponse('您在黑名单中')
3.
在settings配置文件中注册中间件类
# 'app名.中间件文件名.中间件类名'
middleware_classes = (...,
...,
‘book.middleware.blacklistipsmiddleware’)
上一篇: 20190321-用类做一个简单的学生成绩管理系统
下一篇: 关于kafka的一些问题理解