Django框架中间件定义与使用方法案例分析


Posted in Python onNovember 28, 2019

本文实例讲述了Django框架中间件定义与使用方法。分享给大家供大家参考,具体如下:

1. 定义

Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性,其它的MVC框架也有这个功能,名称为IoC。

2. 各个方法

Django在中间件中预置了五个方法,这五个方法的区别在于不同的阶段执行,对输入或输出进行干预,方法如下:

1)初始化:无需任何参数, 服务器接收第一个请求时会被调用一次,而且只调用一次,用于确定是否启用当前中间件。

def init(): 
pass

2)在进行url匹配之前被调用,在每个请求上调用,返回None或HttpResponse对象。

def process_request(request): 
pass

3)在url匹配之后,视图函数调用之前被调用,在每个请求上调用,返回None或HttpResponse对象。

def process_view(request, view_func, view_args, view_kwargs): 
pass

4) 视图函数之后会被调用:所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象。

def process_response(request, response): 
pass

5)异常处理:当视图函数抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象。

def process_exception(request,exception): 
pass

3. 案例加以说明

1)在booktest/目录下创建middleware.py文件,代码如下:

from django.http import HttpResponse
from django.conf import settings
class MyMiddleWare(object):
  def __init__(self):
    print("init")
  def process_request(self,request):
    print("prcess_request")
  def process_view(self,request,view_func,*view_args,**view_kwargs):
    print("process_view")
  def process_response(self,request,response):
    print("process_response")
    return response
  def process_exception(self,request,exception):
    print("exception")

2)在test05/settings.py文件中,向MIDDLEWARE_CLASSES项中注册。

MIDDLEWARE_CLASSES = (
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
  'django.middleware.security.SecurityMiddleware',
  'booktest.middleware.MyMiddleWare',
)

3)修改booktest/views.py中视图index。

# 首页的视图函数
def index(request):
  print("index")
  return render(request,'booktest/index.html')

4)运行服务器,命令行中效果如下图:

Django框架中间件定义与使用方法案例分析

5)刷新页面,命令行中效果如下图:

Django框架中间件定义与使用方法案例分析

6)异常中间件效果:

+如果多个中间件中注册了相同的方法,则先注册的后执行。

修改视图函数如下:

# 首页的视图函数
def index(request):
  print("index")
  raise Exception("value error")
  return render(request,'booktest/index.html')

效果图如下:

Django框架中间件定义与使用方法案例分析

4. Github代码地址:

https://github.com/ITXIAOKE/PythonMiddlewareDemo

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
Python AES加密模块用法分析
May 22 Python
matplotlib设置legend图例代码示例
Dec 19 Python
python2 与python3的print区别小结
Jan 16 Python
使用python实现链表操作
Jan 26 Python
总结Python图形用户界面和游戏开发知识点
May 22 Python
Python实现某论坛自动签到功能
Aug 20 Python
python使用pip安装SciPy、SymPy、matplotlib教程
Nov 20 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
Python configparser模块配置文件过程解析
Mar 03 Python
基于python生成英文版词云图代码实例
May 16 Python
python为什么会环境变量设置不成功
Jun 23 Python
Python如何给函数库增加日志功能
Aug 04 Python
Python Numpy 自然数填充数组的实现
Nov 28 #Python
Python创建数字列表的示例
Nov 28 #Python
flask框架json数据的拿取和返回操作示例
Nov 28 #Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 #Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 #Python
python 变量初始化空列表的例子
Nov 28 #Python
在Python中预先初始化列表内容和长度的实现
Nov 28 #Python
You might like
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
谈谈新手如何学习PHP 默默经典版本
2009/08/04 PHP
PHP禁止个别IP访问网站
2013/10/30 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
php中return的用法实例分析
2015/02/28 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
js获取div高度的代码
2008/08/09 Javascript
js中将字符串转换成json的三种方式
2011/01/12 Javascript
简单的js表单验证函数
2013/10/28 Javascript
WEB前端设计师常用工具集锦
2014/12/09 Javascript
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
PyQt5实现类似别踩白块游戏
2019/01/24 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
浅析Django中关于session的使用
2019/12/30 Python
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
卫校护理专业毕业生求职信
2013/11/26 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
科技工作者先进事迹
2014/08/16 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android
手把手教你导入Go语言第三方库
2021/08/04 Golang
Python面试不修改数组找出重复的数字
2022/05/20 Python