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发送邮件示例(支持中文邮件标题)
Feb 16 Python
Python实现list反转实例汇总
Nov 11 Python
Python新手实现2048小游戏
Mar 31 Python
在Python中使用正则表达式的方法
Aug 13 Python
python 实时遍历日志文件
Apr 12 Python
python实现两个经纬度点之间的距离和方位角的方法
Jul 05 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
python时间序列数据转为timestamp格式的方法
Aug 03 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
python3判断IP地址的方法
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
BBS(php & mysql)完整版(五)
2006/10/09 PHP
PHP新手上路(十四)
2006/10/09 PHP
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
PHP并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
PHP串行化与反串行化实例分析
2016/12/27 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
用js 让图片在 div或dl里 居中,底部对齐
2008/01/21 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
Node.js中常规的文件操作总结
2016/10/13 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
js实现简单页面全屏
2019/09/17 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
Python读写文件方法总结
2015/06/09 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
python实现京东秒杀功能
2018/07/30 Python
基于Django静态资源部署404的解决方法
2019/07/28 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
pytorch数据预处理错误的解决
2020/02/20 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
打架检讨书50字
2014/01/11 职场文书
安全标准化汇报材料
2014/02/03 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
法定授权委托证明书
2014/09/27 职场文书
大学辅导员述职报告
2015/01/10 职场文书
详解Redis瘦身指南
2021/05/26 Redis
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js
Windows Server 2012 R2 磁盘分区教程
2022/04/29 Servers
使用 Koa + TS + ESLlint 搭建node服务器的过程详解
2022/05/30 NodeJs