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的轻便web框架Bottle
Apr 08 Python
python 读取DICOM头文件的实例
May 07 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
python用plt画图时,cmp设置方法
Dec 13 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
Jan 17 Python
对python 自定义协议的方法详解
Feb 13 Python
基于Python中的yield表达式介绍
Nov 19 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
Apr 19 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
Mar 04 Python
python - timeit 时间模块
Apr 06 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
Pygame Event事件模块的详细示例
Nov 17 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
基于文本的访客签到簿
2006/10/09 PHP
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
php5与php7的区别点总结
2019/10/11 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
js charAt的使用示例
2014/02/18 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
2014/06/30 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
JavaScript程序中实现继承特性的方式总结
2016/06/24 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
详解Node项目部署到云服务器上
2017/07/12 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
python获取当前日期和时间的方法
2015/04/30 Python
Python 装饰器深入理解
2017/03/16 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
Python中反射和描述器总结
2018/09/23 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
Python调用JavaScript代码的方法
2020/10/27 Python
HTML5仿微信聊天界面、微信朋友圈实例代码
2018/01/29 HTML / CSS
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
安全承诺书范文
2014/03/26 职场文书
学校安全责任书
2014/04/14 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
2014年检验科工作总结
2014/11/22 职场文书
党校党性分析材料
2014/12/19 职场文书
收入证明申请书
2015/06/12 职场文书
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript