Python Django中间件,中间件函数,全局异常处理操作示例


Posted in Python onNovember 08, 2019

本文实例讲述了Python Django中间件,中间件函数,全局异常处理操作。分享给大家供大家参考,具体如下:

应用名/middleware.py(定义中间件类,中间件函数。文件名可以任意):

from django.http import HttpResponse
# 定义中间件类。 (类名可以任意,但类中的方法名是固定的)
class TestMiddleware(object):
  '''中间件类'''
  def __init__(self):
    '''服务器重启之后,接收第一个请求时调用(只会调用一次)'''
    print('----init----')
  # 中间件函数。(用到哪个函数写哪个,不需要全写)
  def process_request(self, request):
    '''产生request对象之后,url匹配之前调用'''
    print('----process_request----')
    # return HttpResponse('process_request') # 默认放行,不拦截请求。
  def process_view(self, request, view_func, *view_args, **view_kwargs):
    '''url匹配之后,视图函数调用之前调用'''
    print('----process_view----')
    # view_func: url匹配到的视图函数。
    return HttpResponse('process_view') # return HttpResponse对象,表示拦截,直接执行process_response函数。
  def process_response(self, request, response):
    '''视图函数调用之后,response返回浏览器之前'''
    print('----process_response----')
    return response # 一般会返回响应。
# 定义中间件类,处理全局异常
class ExceptionTestMiddleware(object):
  # 如果注册多个process_exception函数,那么函数的执行顺序与注册的顺序相反。(其他中间件函数与注册顺序一致)
  # 中间件函数,用到哪个就写哪个,不需要写所有的中间件函数。
  def process_exception(self, request, exception):
    '''视图函数发生异常时调用'''
    print('----process_exception1----')
    print(exception)

项目名/settings.py(项目配置,注册中间件类):

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.TestMiddleware',  # 注册中间件类 (中间件类所在py文件路径.类名)
  'booktest.middleware.ExceptionTestMiddleware',
  # 如果注册多个process_exception函数,那么函数的执行顺序与注册的顺序相反。
)

Python Django中间件,中间件函数,全局异常处理操作示例

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
python分析nignx访问日志脚本分享
Feb 26 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
Apr 11 Python
基于wxpython开发的简单gui计算器实例
May 30 Python
详解Python中的Descriptor描述符类
Jun 14 Python
使用TensorFlow实现SVM
Sep 06 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
Python 学习教程之networkx
Apr 15 Python
python3实现高效的端口扫描
Aug 31 Python
Python列表list常用内建函数实例小结
Oct 22 Python
tensorflow 查看梯度方式
Feb 04 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
Pytorch实现WGAN用于动漫头像生成
Mar 04 Python
Django框架下静态模板的继承操作示例
Nov 08 #Python
python中自带的三个装饰器的实现
Nov 08 #Python
python反转列表的三种方式解析
Nov 08 #Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
Nov 08 #Python
Python通过递归获取目录下指定文件代码实例
Nov 07 #Python
Django REST framework 单元测试实例解析
Nov 07 #Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 #Python
You might like
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
php另类上传图片的方法(PHP用Socket上传图片)
2013/10/30 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
不用MOUSEMOVE也能滑动啊
2007/05/23 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
JavaScript之数组扁平化详解
2019/06/03 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
Python之自动获取公网IP的实例讲解
2017/10/01 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
聚网科技C++面试笔试题
2015/09/01 面试题
大学校园生活自我鉴定
2014/01/13 职场文书
会计学专业自荐信
2014/06/25 职场文书
教师一帮一活动总结
2014/07/08 职场文书
会计专业自荐书
2014/07/08 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
《乘法分配律》教学反思
2016/02/24 职场文书
创业计划书之个人工作室
2019/08/22 职场文书
MySQL 数据类型选择原则
2021/05/27 MySQL
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
解决MySQL报“too many connections“错误
2022/04/19 MySQL