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 11 Python
Python3中简单的文件操作及两个简单小实例分享
Jun 18 Python
python实战之实现excel读取、统计、写入的示例讲解
May 02 Python
Windows下python3.6.4安装教程
Jul 31 Python
python实现Zabbix-API监控
Sep 17 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
python上selenium的弹框操作实现
Jul 13 Python
Python 日期与时间转换的方法
Aug 01 Python
python switch 实现多分支选择功能
Dec 21 Python
python 基于opencv去除图片阴影
Jan 26 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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
?繁体转换的class
2006/10/09 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
php单链表实现代码分享
2016/07/04 PHP
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
node.js使用require()函数加载模块
2014/11/26 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
jquery+html仿翻页相册功能
2016/12/20 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
浅析Git版本控制器使用
2017/12/10 Python
python将回车作为输入内容的实例
2018/06/23 Python
Python线程之定位与销毁的实现
2019/02/17 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
python如何将两张图片生成为全景图片
2020/03/05 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
高三英语教学反思
2014/01/13 职场文书
酒店销售经理岗位职责
2014/01/31 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
励志演讲稿大全
2014/08/21 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
个性发展自我评价2015
2015/03/09 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python