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中ConfigParse模块的用法
Sep 29 Python
简介Django中内置的一些中间件
Jul 24 Python
简单谈谈python中的语句和语法
Aug 10 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 Python
在dataframe两列日期相减并且得到具体的月数实例
Jul 03 Python
Python列表删除元素del、pop()和remove()的区别小结
Sep 11 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
pandas.DataFrame.drop_duplicates 用法介绍
Jul 06 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
基于Python实现全自动下载抖音视频
Nov 06 Python
Python读写yaml文件
Mar 20 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 编程安全性小结
2010/01/08 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
Javascript的&&和||的另类用法
2014/07/23 Javascript
初识Node.js
2015/03/20 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
ReactNative页面跳转Navigator实现的示例代码
2017/08/02 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
Python pymongo模块常用操作分析
2018/09/01 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
python实现字符串和数字拼接
2020/03/02 Python
解决Django no such table: django_session的问题
2020/04/07 Python
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
工程现场管理求职自荐信
2013/10/02 职场文书
应届实习生的自我评价范文
2014/01/05 职场文书
餐饮业创业计划书范文
2014/01/06 职场文书
创先争优活动方案
2014/02/12 职场文书
财政专业求职信范文
2014/02/19 职场文书
高中生操行评语
2014/04/25 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
担保贷款承诺书
2015/04/30 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS