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 相关文章推荐
python3图片转换二进制存入mysql
Dec 06 Python
python实现得到一个给定类的虚函数
Sep 28 Python
Python3实现从文件中读取指定行的方法
May 22 Python
在Django中同时使用多个配置文件的方法
Jul 22 Python
Python新手入门最容易犯的错误总结
Apr 24 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
Python使用装饰器进行django开发实例代码
Feb 06 Python
python实现日常记账本小程序
Mar 10 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
Python中整数的缓存机制讲解
Feb 16 Python
Python multiprocessing多进程原理与应用示例
Feb 28 Python
python文件和文件夹复制函数
Feb 07 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中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
PHP面向对象法则
2012/02/23 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
解决easyui日期时间框ie的兼容的问题
2018/03/01 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
详解vue 组件注册
2020/11/20 Vue.js
python生成器的使用方法
2013/11/21 Python
浅析Python中yield关键词的作用与用法
2016/11/29 Python
利用Python操作消息队列RabbitMQ的方法教程
2017/07/19 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
英国最大的女性服装零售商:Dorothy Perkins
2017/03/30 全球购物
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
2014-2015学年工作总结
2014/11/27 职场文书
小学优秀班主任材料
2014/12/17 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server
MySQL中的隐藏列的具体查看
2021/09/04 MySQL