自定义中间件

第一步:在根目录创建路径Middle/m1.py(注意如果是python2的话Middle下要有__init__.py文件,不然会报找不到模块错误)
m1.py的内容:
 # -*- coding: utf-8 -*-
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse class Row1(MiddlewareMixin):
def process_request(self,request):
print ('第一步') def process_view(self, request, view_func, view_func_args, view_func_kwargs):
print('中间第一步') def process_response(self,request,response):
print ('倒数第一步')
return response class Row2(MiddlewareMixin):
def process_request(self,request):
print ('第2步') def process_view(self, request, view_func, view_func_args, view_func_kwargs):
print('中间第2步') def process_response(self,request,response):
print ('倒数第2步')
return response class Row3(MiddlewareMixin):
def process_request(self,request):
print ('第3步') def process_view(self, request, view_func, view_func_args, view_func_kwargs):
print('中间第3步') def process_response(self,request,response):
print ('倒数第3步')
return response def process_exception(self, request, exception):
if isinstance(exception,ValueError):
return HttpResponse('出现异常》。。') def process_template_response(self,request,response):
# 如果Views中的函数返回的对象中,具有render方法
print('-----------------------')
return response
项目setting.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',
'Middle.m1.Row1',
'Middle.m1.Row2',
'Middle.m1.Row3',
]

实际输出结果:

第一步
第2步
倒数第2步
倒数第一步

中间件的作用流程

实际的请求流程图:

最新文章

  1. 小tips合集
  2. 从零开始学 Java - Spring 使用 Quartz 任务调度定时器
  3. Spring+EhCache缓存实例
  4. objc@interface的设计哲学与设计技巧
  5. [Bug]当IDENTITY_INSERT设置为OFF时,不能为表“xx”中的标识列插入显示的值
  6. C# 模拟鼠标写字
  7. python还不能作为主要编程语言的原因:
  8. atitit.提升稳定性---hibernate 添加重试retry 机制解决数据库连接关闭
  9. IntelliJ IDEA中类似Eclipse自动补全变量名称和属性名称的快捷键
  10. (转ORCLE导入导出命令)
  11. File类实现文件夹和文件复制
  12. git命令行常用几个指令(细节问题)
  13. .NET Core 技巧汇总篇
  14. L1范数与L2范数​
  15. python3-基础6
  16. Ubuntu1404安装eclipse(目的是为了运行python,当然java更可以)
  17. RFC
  18. 练习:将值是null的数据删除掉(剔除):com.fasterxml.jackson.annotation.JsonInclude;包
  19. mysql中文编码问题
  20. C# to IL 8 Methods(方法)

热门文章

  1. Linux校园网DNS问题
  2. 【leetcode】1122. Relative Sort Array
  3. Serverless 实战 —— 函数计算 + Typescript 实践
  4. 事物Spring boot @Transactional
  5. JWT--无状态单点登录
  6. PHP文件的上传和下载
  7. Java——容器(Comparable)
  8. RedisTemplate访问Redis数据结构(二)——List
  9. session.flush()与session.clear()的区别
  10. vue 使用props 实现父组件向子组件传数据