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 判断网络连通的实现方法
Apr 22 Python
tensorflow 获取变量&打印权值的实例讲解
Jun 14 Python
python实现知乎高颜值图片爬取
Aug 12 Python
numpy.ndarray 实现对特定行或列取值
Dec 05 Python
Python使用Socket实现简单聊天程序
Feb 28 Python
django model object序列化实例
Mar 13 Python
python对指定字符串逆序的6种方法(小结)
Apr 02 Python
Python求凸包及多边形面积教程
Apr 12 Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 Python
使用Python将语音转换为文本的方法
Aug 10 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
Nov 15 Python
用python自动生成日历
Apr 24 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去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
jQuery判断密码强度实现思路及代码
2013/04/24 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
2014/04/11 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
2017/04/05 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
python线程、进程和协程详解
2016/07/19 Python
python实现简单遗传算法
2018/03/19 Python
Django框架视图函数设计示例
2019/07/29 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
Python切片列表字符串如何实现切换
2020/08/06 Python
python3将变量输入的简单实例
2020/08/19 Python
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
Clarks鞋美国官网:全球领军鞋履品牌
2017/05/13 全球购物
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
研修第一天随笔感言
2014/02/15 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
运动员口号
2014/06/09 职场文书
实习协议书
2015/01/27 职场文书