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中使用M2Crypto模块实现AES加密的教程
Apr 08 Python
Python对List中的元素排序的方法
Apr 01 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
Python处理命令行参数模块optpars用法实例分析
May 31 Python
python3 批量获取对应端口服务的实例
Jul 25 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
python getpass实现密文实例详解
Sep 24 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
Django中使用Json返回数据的实现方法
Jun 03 Python
Django-silk性能测试工具安装及使用解析
Nov 28 Python
Python办公自动化之Excel(中)
May 24 Python
Python matplotlib 利用随机函数生成变化图形
Apr 26 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
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
Yii学习总结之安装配置
2015/02/22 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
javascript入门基础之私有变量
2010/02/23 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
浅谈Pycharm调用同级目录下的py脚本bug
2018/12/03 Python
Python time库基本使用方法分析
2019/12/13 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
Python打印不合法的文件名
2020/07/31 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
Python eval函数原理及用法解析
2020/11/14 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
前端实现打印图像功能
2019/08/27 HTML / CSS
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
大学毕业感言
2014/01/10 职场文书
新三好学生主要事迹
2014/01/23 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
自查自纠整改报告
2014/11/06 职场文书
学雷锋感言
2015/08/03 职场文书
公司食堂管理制度
2015/08/05 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫