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网络编程学习笔记(一)
Jun 09 Python
介绍Python中几个常用的类方法
Apr 08 Python
python中print的不换行即时输出的快速解决方法
Jul 20 Python
Python标准库之collections包的使用教程
Apr 27 Python
Python定义二叉树及4种遍历方法实例详解
Jul 05 Python
对pandas中Series的map函数详解
Jul 25 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
Python3简单实现串口通信的方法
Jun 12 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
python自动打开浏览器下载zip并提取内容写入excel
Jan 04 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 Python
Python 读取千万级数据自动写入 MySQL 数据库
Jun 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
全国FM电台频率大全 - 25 云南省
2020/03/11 无线电
php 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
浅谈PDO的rowCount函数
2015/06/18 PHP
yii添删改查实例
2015/11/16 PHP
PHP类的特性实例分析
2016/09/28 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
javaScript 数值型和字符串型之间的转换
2009/07/25 Javascript
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
aspx中利用js实现确认删除代码
2010/07/22 Javascript
菜鸟学习JavaScript小实验之函数引用
2010/11/17 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
jquery+easeing实现仿flash的载入动画
2015/03/10 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
element 结合vue 在表单验证时有值却提示错误的解决办法
2018/01/22 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
vue单文件组件无法获取$refs的问题
2020/06/24 Javascript
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
会计工作心得体会
2014/01/13 职场文书
婚礼主持词开场白
2014/03/13 职场文书
物流专业自荐信
2014/05/23 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
复兴之路展览观后感
2015/06/02 职场文书