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使用logging结合decorator模式实现优化日志输出的方法
Apr 16 Python
详解pyqt5 动画在QThread线程中无法运行问题
May 05 Python
利用Python yagmail三行代码实现发送邮件
May 11 Python
Python实现字符型图片验证码识别完整过程详解
May 10 Python
python实现电子书翻页小程序
Jul 23 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
opencv之颜色过滤只留下图片中的红色区域操作
Jun 05 Python
python中tkinter窗口位置\坐标\大小等实现示例
Jul 09 Python
基于Python的一个自动录入表格的小程序
Aug 05 Python
Python通过Schema实现数据验证方式
Nov 12 Python
解决Python中的modf()函数取小数部分不准确问题
May 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
php str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
JS为什么说async/await是generator的语法糖详解
2019/07/11 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
基于ts的动态接口数据配置的详解
2019/12/18 Javascript
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
Python生成8位随机字符串的方法分析
2017/12/05 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
python实现周期方波信号频谱图
2018/07/21 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
python实现简单的购物程序代码实例
2020/03/03 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
Python如何将模块打包并发布
2020/08/30 Python
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
医药公司采购员岗位职责
2014/09/12 职场文书
上课说话检讨书
2015/01/27 职场文书
2015年初中生自我评价范文
2015/03/03 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
python计算列表元素与乘积详情
2022/08/05 Python