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中的__init__和__new__
Mar 12 Python
Python与Redis的连接教程
Apr 22 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
May 25 Python
python实现读取并显示图片的两种方法
Jan 13 Python
TensorFlow平台下Python实现神经网络
Mar 10 Python
python skimage 连通性区域检测方法
Jun 21 Python
python 检查文件mime类型的方法
Dec 08 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
pandas中DataFrame检测重复值的实现
May 26 Python
基于Python实现nc批量转tif格式
Aug 14 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
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
坏狼的PHP学习教程之第1天
2008/06/15 PHP
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
jQuery代码优化之基本事件
2011/11/01 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
2016/10/08 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
Javascript实现购物车功能的详细代码
2018/05/08 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
python刷投票的脚本实现代码
2014/11/08 Python
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
Python数据类型详解(二)列表
2016/05/08 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
animation和transition的区别
2020/10/12 HTML / CSS
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
怎样写好创业计划书的内容
2014/02/06 职场文书
民事答辩状格式范文
2015/05/21 职场文书
消费者投诉书范文
2015/07/02 职场文书
高效课堂教学反思
2016/02/24 职场文书
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers
PHP RabbitMQ消息列队
2022/05/11 PHP