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高并发异步服务器核心库forkcore使用方法
Nov 26 Python
Python标准库之多进程(multiprocessing包)介绍
Nov 25 Python
Python写的Tkinter程序屏幕居中方法
Mar 10 Python
解读Python中degrees()方法的使用
May 18 Python
Python编程实现蚁群算法详解
Nov 13 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
浅谈python标准库--functools.partial
Mar 13 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
Python高阶函数与装饰器函数的深入讲解
Nov 10 Python
Python下载的11种姿势(小结)
Nov 18 Python
Python如何把不同类型数据的json序列化
Apr 30 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 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线性表的入栈与出栈实例分析
2015/06/12 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
Prototype String对象 学习
2009/07/19 Javascript
Jquery 弹出层插件实现代码
2009/10/24 Javascript
写js时遇到的一些小问题
2010/12/06 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
用C++封装MySQL的API的教程
2015/05/06 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
人机交互程序 python实现人机对话
2017/11/14 Python
简单实现python数独游戏
2018/03/30 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
python numpy中cumsum的用法详解
2019/10/17 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
八皇后问题,输出了所有情况,不过有些结果只是旋转了90度
2016/08/15 面试题
深圳茁壮笔试题
2015/05/28 面试题
市三好学生主要事迹
2014/01/28 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
物理学专业求职信
2014/07/04 职场文书
听课评课活动心得体会
2016/01/15 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书