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 相关文章推荐
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
Dec 19 Python
python实现NB-IoT模块远程控制
Jun 20 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
May 16 Python
Python 串口读写的实现方法
Jun 12 Python
pytorch使用指定GPU训练的实例
Aug 19 Python
django使用xadmin的全局配置详解
Nov 15 Python
Python递归函数特点及原理解析
Mar 04 Python
10个python爬虫入门实例(小结)
Nov 01 Python
Python爬虫实战之爬取携程评论
Jun 02 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
PHP 采集心得技巧
2009/05/15 PHP
php自动载入类用法实例分析
2016/06/24 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
JavaScript 不只是脚本
2007/05/30 Javascript
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
快速入手Python字符编码
2016/08/03 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
Parfumdreams芬兰:购买香水和化妆品
2021/02/13 全球购物
Yahoo的PHP面试题
2014/05/26 面试题
家长写给老师的建议书
2014/03/13 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
单位委托书怎么写
2014/08/02 职场文书
2015清明节祭奠英烈寄语大全
2015/03/04 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
MySQL基于索引的压力测试的实现
2021/11/07 MySQL