Django 中间件

一、Django请求生命周期

浏览器 → wsgi模块 → 中间件 → urls控制器 → 视图函数 → 数据库/模板渲染

  ↑                               ↓

  *     ←    wsgi模块       ←       中间件       ←      识图函数  ←  *

 

 

 二、中间件介绍

中间件顾名思义 是介于request与response处理之间的一道处理过程 相比较轻量级 并且在全局上改变django的输入与输出。 

django中默认自带的一些中间件(settings.py文件中)

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',
    'apptest',
]

 

 

 三、自定义中间件

 中间件可以定义五个方法 分别是 

  • process_request(self,request)
  • process_view(self,request,view_func,view_args,view_kwargs)
  • process_template_response(self,request,response)
  • process_exception(self,request,exception)
  • process_response(self,request,response)

 

自定义一个中间件示例 

from django.utils.deprecation import MiddlewareMixin
from django.urls import reverse
from django.shortcuts import HttpResponse,redirect

class MD1(MiddlewareMixin):
    def process_request(self,request):
        # 请求来时 过中间件会自动执行 正常返回None 异常可以回复HttpResponse对象,由上而下执行
        print('hi MD1的请求')class MD2(MiddlewareMixin):
    def process_request(self,request):
        print('Md2的process_request')
        pass

  

 process_request

有一个参数,就是request,这个request和视图函数中的request是一样的

 

 

 

posted @ 2019-06-24 11:27  神秘海螺  阅读(117)  评论(0编辑  收藏  举报