Django-中间件

概述

  • 一个轻量级、底层的插件,可以介入Django的请求和响应处理过程,修改Django的输入或输出
  • 每个中间件组件就是一个独立的python类

方法

  • **__init__:**无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件
  • **process_request(request):**处理请求前
    • 在每个请求上执行
    • request对象产生之后,url匹配之前调用
    • 返回None或者HTTPResponse对象
  • **process_view(request, view_func, view_args, view_kwargs):**处理视图前
    • 在每个请求上执行
    • url匹配之后,视图函数调用之前调用
    • 返回None或者HTTPResponse对象
  • **process_template_response(request, response):**处理模板之前(非重点)
    • 在每个请求上执行
    • 视图函数调用之后,模板调用之前执行
    • 返回None或者HTTPResponse对象
  • **process_response(request, response):**处理响应后
    • 在每个请求上执行
    • 视图函数调用之后,所有响应返回浏览器之前被调用
    • 返回HTTPResponse对象
  • **process_exception(request, exception):**视图抛出异常时
    • 在每个请求上调用
    • 当视图抛出异常时调用
    • 返回一个HTTPResponse对象

创建中间件

  • 在应用目录下创建名为middlewares的包
  • 在该目录下创建中间件类文件
    1
    2
    3
    4
    5
    6
    7
    from django.utils.deprecation import MiddlewareMixin


    class MyMiddle(MiddlewareMixin):
    def process_request(self, request):
    request.description = "sunck is a good man"
    return None

    myMiddle.py

配置自定义中间件

1
2
3
4
5
6
7
8
9
10
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',
'myApp.middlewares.myMiddle.MyMiddle',
]

测试中间件

1
2
3
4
def index(request):
print('*' * 50)
print(request.description)
return render(request, 'myApp/index.html')

原理图

中间件

本文结束 感谢您的阅读
正在加载今日诗词....