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之入门(二)基本数据类型
May 25 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
python 中的int()函数怎么用
Oct 17 Python
python使用turtle库绘制树
Jun 25 Python
python与caffe改变通道顺序的方法
Aug 04 Python
Python3.5字符串常用操作实例详解
May 01 Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 Python
python SQLAlchemy的Mapping与Declarative详解
Jul 04 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
Python使用Opencv实现图像特征检测与匹配的方法
Oct 30 Python
Python中join()函数多种操作代码实例
Jan 13 Python
Python基础之赋值,浅拷贝,深拷贝的区别
Apr 30 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
php5中date()得出的时间为什么不是当前时间的解决方法
2008/06/30 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
网页自动跳转代码收集
2009/09/27 Javascript
仅用[]()+!等符号就足以实现几乎任意Javascript代码
2010/03/01 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
javascript 正则表达式分组、断言详解
2017/04/20 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
Node.js搭建小程序后台服务
2018/01/03 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
2020/04/22 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
Python3多线程爬虫实例讲解代码
2018/01/05 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
python读取ini配置文件过程示范
2019/12/23 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
Python远程linux执行命令实现
2020/11/11 Python
需要知道的CSS3动画技术
2010/01/01 HTML / CSS
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
CSS中的字体大小设置属性总结
2016/05/24 HTML / CSS
全国道德模范事迹
2014/02/01 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
大学活动总结模板
2014/07/10 职场文书
优秀学生干部事迹材料
2014/12/24 职场文书
百年校庆感言
2015/08/01 职场文书