自定义中间件
官网:中间件 | Django 文档 | Django
中间件使用多就在主应用创建,仅限于子应用就在子引用中创建中间件文件.py
之后在settings.py文件中去配置中间件,运行的时候会自动调用中间件
def simple_middleware(get_response):def middleware(request):# 业务处理前response = get_response(request)# 业务处理后return responsereturn middlewareclass SimpleMiddleware:def __init__(self, get_response):self.get_response = get_response# One-time configuration and initialization.def __call__(self, request):# 业务处理前response = get_response(request)# 业务处理后return response
process_view函数
process_view() 只在 Django 调用视图前被调用,它应该返回 None
或 HttpResponse 对象。
- 返回
None
,Django 将继续处理这个请求,执行任何其他的process_view()
,然后执行相应的视图 - 如果它返回 HttpResponse 对象,Django 不会去影响调用相应的视图;它会将响应中间件应用到 HttpResponse 并返回结果。
process_view(request, view_func, view_args, view_kwargs)
-
request 是一个 HttpRequest对象
-
view_func 是一个 Django 将要使用的 Python 函数。(这是一个真实的函数对象,不是函数的名称)
-
view_args 是一个用来传递给视图的位置参数列表
-
view_kwargs 是一个用来传递给视图的关键字参数字典
提示
view_args 和 view_kwargs 都不包含第一个视图参数 ( request )
中间件的应用场景
- 网站维护更新,不让用户访问可以使用中间件
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',# 自定义中间件'middle_app.middleware.UpwebMiddle', # 网站维护使用
]
from django.http import HttpResponse
from django.conf import settingsclass UpwebMiddle():def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):if request.path.startswith(settings.WH_URL):return HttpResponse("维护中无法访问")response = self.get_response(request)return response