目录
中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。django默认有七个中间件。
django settings.py中 MIDLLEWARE配置项:
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',
]
django默认有七个中间件, 并且支持自定义中间件,给用户暴露5个自定义的方法
只要你想要做一些网站的全局性功能,你都应该考虑使用django的中间件
from django.utils.deprecation import MiddlewareMixin
class MyMdd1(MiddlewareMixin):
def process_request(self, request):
print('我是第一个中间件里的process_request方法')
class MyMdd2(MiddlewareMixin):
def process_request(self, request):
print('我是第二个中间件里的process_request方法')
总结:
def process_response(self, request, response):
"""
:param request:
:param response: 就是后端返回给前端的数据
:return:
"""
print('我是第一个中间件里的process_response方法')
return response # 必须要返回response
总结:
def process_view(self, request, view_func, *args, **kwargs):
print('我是第一个中间件里的process_view方法')
process_view(self, request, view_func, view_args, view_kwargs), 该方法有四个参数
process_template_response(self, request, response)
视图函数要这样写,才能触发:
def func(request):
print('我是func函数')
def render():
return HttpResponse('你好吗')
obj = HttpResponse('我不好')
obj.render = render
return obj
当你返回的对象中含有render属性指向的是一个render方法的时候才能触发, 是从下往上的顺序
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse, render, redirect
class MyMdd1(MiddlewareMixin):
def process_request(self, request):
print('我是第一个中间件里的process_request方法')
# return HttpResponse('我是中间件1')
def process_response(self, request, response):
"""
:param request:
:param response: 就是后端返回给前端的数据
:return:
"""
print('我是第一个中间件里的process_response方法')
return response
# return HttpResponse('我是中间件1')
def process_view(self, request, view_func, *args, **kwargs):
print('我是第一个中间件里的process_view方法')
def process_exception(self, request, exception):
print('我是第一个中间件里的process_exception方法')
class MyMdd2(MiddlewareMixin):
def process_request(self, request):
print('我是第二个中间件里的process_request方法')
def process_response(self, request, response):
print('我是第二个中间件里的process_response方法')
return response
# return HttpResponse('我是中间件2')
def process_view(self, request, view_func, *args, **kwargs):
print('我是第二个中间件里的process_view方法')
def process_exception(self, request, exception):
print('我是第二个中间件里的process_exception方法')
原文:https://www.cnblogs.com/setcreed/p/11986214.html