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