关于中间价:

django 中的中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

在django项目的settings中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件

settings.py:

MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
'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',
]

中间件中可以定义五个方法:

process_request(self,request)
process_view(self, request, callback, callback_args, callback_kwargs)
process_template_response(self,request,response)
process_exception(self, request, exception)
process_response(self, request, response)

以上方法的返回值可以是None和HttpResonse对象,如果是None,则继续按照django定义的规则向下执行,如果是HttpResonse对象,则直接将该对象返回给用户。

中间件执行过程:

自定义中间件

步骤

1.创建中间件类

Project/middle_ware/middle_print.py

from django.utils.deprecation import MiddlewareMixin

class First(MiddlewareMixin):

    def process_request(self, request):
pass def process_view(self, request, callback, callback_args, callback_kwargs):
pass def process_exception(self, request, exception):
pass def process_template_response(self, request, response):
# 当views中返回一个render时执行
pass def process_response(self, request, response):
return response

2.注册中间件

MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
'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_ware.middle_print.First',
]

自定义中间件完成

最新文章

  1. php产生随机数函数
  2. c++ 职责链模式(Chain of Responsibility)
  3. Quicksum-S.B.S.
  4. Word2013可以写博客
  5. php获取网页header信息的4种方法
  6. jQuery.Autocomplete实现自动完成功能
  7. http的无状态无连接到底是什么含义
  8. 织梦dedecms|文章页通用标签
  9. 解决alaert.builder二次调用报错的bug
  10. POJ 1699 Best Sequence (DFS+预处理)
  11. 修改LibreOffice Draw中定义的样式名称
  12. 笨办法40模块, 类和对象class
  13. js模块化编程之彻底弄懂CommonJS和AMD/CMD!
  14. python之OpenCv
  15. 剑指offer面试题4: 二维数组中的查找
  16. 最新java学习路线:含阶段性java视频教程完整版
  17. python进行爬虫
  18. 趣谈Java变量的可见性问题
  19. 非接触式读卡器13.56MHZ芯片:SI522
  20. bug:margin塌陷

热门文章

  1. 2019年最新50道java基础部分面试题(三)
  2. c++用流控制成员函数输出数据
  3. 数据库访问接口(ODBC,OLEDB,ADO)
  4. Note | 常用指令,工具,教程和经验笔记
  5. HTML连载45-浮动元素脱标、排序规则、贴靠现象
  6. Unity TextMeshPro替代Text组件创建简体中文字体纹理集
  7. 【文本处理命令】之awk命令详解
  8. Java中的ThreadLocal
  9. MySQL(9)---纪录一次实际开发过程中用到的复杂存储过程
  10. Razor_06 列表的查询