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

在django项目的settings模块中,有一个 MIDDLEWARE变量,其中每一个元素就是一个中间件(也就是一个中间件模块的一个类),如下。

settings模块中

#中间件
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',
]

自定义中间件

1、定义中间件模块,在中间件模块里定义中间件类

process_request(self, request)有请求时执行
  request参数接收请求信息对象

process_view(self, request, callback, callback_args, callback_kwargs)逻辑处理之前执行

process_exception(self, request, exception)出错时执行
  exception参数接收错误信息

process_response(self, request, response)响应后执行,无论是否出错
  response参数接收html页面对象,立面包含响应码

#!/usr/bin/env python
#coding:utf-8
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import render class zhongjianjian(MiddlewareMixin): def process_request(self, request):
print('有请求时执行')
# print(request.META) #请求对象内容
#在这里可以做ip访问拦截器 def process_view(self, request, callback, callback_args, callback_kwargs):
print('逻辑处理之前执行') def process_exception(self, request, exception):
print('出错时执行')
# return render(request, 'app1/cuowu.html')
print(exception)
#做程序出错时处理 def process_response(self, request, response):
print('响应后执行,无论是否出错')
return response

2、将中间件模块里的类路径注册到MIDDLEWARE列表里

#中间件
MIDDLEWARE = [
'app1.chajian.zhong_jian_jian.zhongjianjian',
'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',
]

中间件工作流程

#中间件
MIDDLEWARE = [
'app1.chajian.zhong_jian_jian.zhongjianjian',
'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',
]

如果出错流程

最新文章

  1. 对于C(n,k)取模
  2. MongoDB(五)mongo语法和mysql语法对比学习
  3. 虚拟机开机提示Operating System not found解决办法
  4. Emoji表情符号录入MySQL数据库报错
  5. log4j配置不同的类多个日志文件
  6. web前端开发教程系列-2 - 前端开发书籍分享(转)
  7. codeforces 471B. MUH and Important Things 解题报告
  8. form属性method="get/post
  9. eclipse启动不了报错java was started but returned exit code=13
  10. 九度OJ 1497 面积最大的全1子矩阵 -- 动态规划
  11. 再次深入理解delphi的类
  12. ZOJ 3702 Fibonacci
  13. 2013 吉林通化邀请赛 Play Game 记忆化搜索
  14. java逼出来的递归中间
  15. ubuntu上的mysql数据库双机备份设置
  16. solr 学习之简介及安装
  17. Django REST framework反向生成url
  18. eclipse远程调试Tomcat方法(测试成功并且说说遇到的坑)
  19. Java基于opencv实现图像数字识别(一)
  20. 2.5 UML顺序图

热门文章

  1. udp广播和多播
  2. CSDN开源夏令营 基于Compiz的switcher插件设计与实现之前期准备 git的简单使用
  3. Linux 能PING IP 但不能PING 主机域名的解决方法 vim /etc/nsswitch.conf hosts: files dns wins
  4. Linux的各个文件夹名称解释(FHS)
  5. web 网页截取图片
  6. iOS OC和JS的交互 javaScriptCore方法封装
  7. php header, 允许ajax跨域访问
  8. MySQL 练习 答案
  9. 我的Android进阶之旅------>Android二级ListView列表的实现
  10. hibernate 多对多操作(级联操作)