自定义中间件
中间件使用多就在主应用创建,仅限于子应用就在子引用中创建中间件文件.py
之后在settings.py文件中去配置中间件,运行的时候会自动调用中间件
python
def simple_middleware(get_response):
def middleware(request):
# 业务处理前
response = get_response(request)
# 业务处理后
return response
return middleware
class 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 )
中间件的应用场景
-
网站维护更新,不让用户访问可以使用中间件
python
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', # 网站维护使用
]
python
from django.http import HttpResponse
from django.conf import settings
class UpwebMiddle():
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.path.startswith(settings.WH_URL):
return HttpResponse("维护中无法访问")
response = self.get_response(request)
return response