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开发的小球完全弹性碰撞游戏代码
Oct 15 Python
Python批量按比例缩小图片脚本分享
May 21 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
在pycharm中设置显示行数的方法
Jan 16 Python
python+selenium select下拉选择框定位处理方法
Aug 24 Python
用Python画一个LinkinPark的logo代码实例
Sep 10 Python
动态设置django的model field的默认值操作步骤
Mar 30 Python
Python super()函数使用及多重继承
May 06 Python
python中把元组转换为namedtuple方法
Dec 09 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 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
How do I change MySQL timezone?
2008/03/26 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
php取出数组单个值的方法
2018/03/12 PHP
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
JS input 数字验证代码
2009/07/30 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
jquery根据name属性查找的小例子
2013/11/21 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
bootstrap实现弹窗和拖动效果
2016/01/03 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
深入学习Bootstrap表单
2016/12/13 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
美国钻石商店:Zales
2016/11/20 全球购物
连带责任保证书
2014/04/29 职场文书
怎样写离婚协议书
2014/09/10 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
设备收款委托书范本
2014/10/02 职场文书