Django中间件的介绍及使用

Posted on 2019-08-07 15:01  不听慢歌的策哥  阅读(181)  评论(0编辑  收藏  举报

1、中间件的理解

            是用来处理Django请求与响应的框架级别的钩子,处于wsgi模块与视图函数之间,在执行视图函数之前和之后所做
      的动作,是一个轻量级、低级别的插件,作用于全局,使用不当很可能影响性能。

2、导入中间件模块

     在app01下创建my_middlewares.py文件
     # from django.middleware.csrf import CsrfViewMiddleware 按住Ctrl键然后鼠标单击CsrfViewMiddleware
    

1  from django.utils.deprecation import MiddlewareMixin

 

3、注册中间件

     打开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',
          'app01.my_middlewares.MD1' 
          'app01.my_middlewares.MD2' # 注册中间件
    ]

 

 

 

4、中间件就是一个类,处理django的请求和响应的五个方法
     参数   执行时间   执行顺序   返回值

1)process_request(self,request):
  参数:
  request跟视图函数中的request一样

  执行时间:
  视图函数执行之前,也在路由匹配之前。

  执行顺序:
  按照中间件的注册顺序 顺序执行

  返回值:
  None: 正常流程
  HttpResponse: 如果MD1(第一个注册的中间件)有返回值,那么之后的中间件、路由匹配、视图函数都不执行了,
  直接执行当前中间件中的process_response方法,剩下正常流程将执行结果返回给浏览器。

2)process_response(self,request,response):
  参数:
  response response对象
  request跟视图函数中的request一样
  视图函数在执行后,需要return response,所以中间件也需要返回response

  执行时间:
  视图函数执行之后

  执行顺序:
  按照中间件的注册顺序 倒序执行

  返回值:
  HttpResponse: 必须返回response对象

(3)process_view(self,request,view_func,view_args,view_kwargs):
  参数:
  request跟视图函数中的request一样
  view_func 视图函数
  view_args 传递给视图函数的位置参数
  view_kwargs 传递给视图函数的关键字参数
  形参的名字可以任意取

  执行时间:
  视图函数执行之前,路由匹配之后。

  执行顺序:
  按照中间件的注册顺序 顺序执行

  返回值:
  None: 正常流程

       HttpResponse: 当前中间件之后的中间件process_view、视图函数都不执行,

                                直接执行最后一个中间件中的process_response方法,剩下正常流程将结果返回给浏览器

(4)process_expection(self,request,expection):
  参数:
  request跟视图函数中的request一样
  expection 错误对象

  执行时间(触发条件):

  视图函数执行出错之后才执行

  执行顺序:

  按照中间件的注册顺序 倒序执行

  返回值:

  None: 交给下一个中间件处理异常,都不处理交给Django处理。
  HttpResponse: 当前中间件之后的中间件process_expection都不执行,
         直接执行最后一个中间件中的process_response方法,剩下正常流程将结果返回给浏览器。

 

(5)process_template_response(self,request,response):
  参数:
  request跟视图函数中的request一样
  response template_response对象
  response.template_name = 'index1.html' #可以动态换模板
  response.context_data['name'] = 'jack' #可以动态换模板内容

 

  执行时间(触发条件):
  视图函数返回的是template_response对象
  打开views.py 导入TemplateResponse
  from django.template.response import TemplateResponse
  执行顺序:
  按照中间件的注册顺序 倒序执行
  返回值:
  HttpResponse: 必须返回template_response对象

 

Copyright © 2024 不听慢歌的策哥
Powered by .NET 9.0 on Kubernetes