Django2.1.3 中间件使用详解


Posted in Python onNovember 26, 2018

环境

  • Win10
  • Python3.6.6
  • Django2.1.3

中间件作用 中间件用于全局修改Django的输入或输出。

中间件常见用途

  • 缓存
  • 会话认证
  • 日志记录
  • 异常

中间件执行流程

Django2.1.3 中间件使用详解

全局异常捕捉实现

创建django项目&添加app

django-admin startproject middleware
cd middleware
django-admin startapp app

添加app到项目

# middleware/settings.py
# INSTALLED_APPS最后添加 app
INSTALLED_APPS = [
 'app',
]

编辑中间件并添加到项目

注:中间件注册访问有一定的关联性,位置不可以随意放

# 创建app/middleware.py并编辑
from django.http import JsonResponse


class CustomMiddleware:
 def __init__(self, get_response):
  print("程序启动时执行, 只执行一次")
  self.get_response = get_response

 def __call__(self, request):
  print("中间件开始")
  response = self.get_response(request)
  print("中间件结束")
  return response

 def process_view(self, request, view_func, view_args, view_kwargs):
  print("请求实际函数前执行")

 def process_exception(self, request, exception):
  print("程序异常时执行")
  return JsonResponse({"msg": exception.args[0], "code": -1})

编辑middleware.setttings.py

MIDDLEWARE = [
...
'app.middleware.CustomMiddleware'
]

编写一个异常

# app/views.py
from django.http import JsonResponse


def json_response(request):
 print('json_response')
 err = 3 / 0
 return JsonResponse({"msg": "ok", "code": 0})

添加到路由

# middleware/urls.py

from app.views import json_response, view_response

urlpatterns = [
 ...
 path("view", view_response)
]

运行测试

访问: http://127.0.0.1:8000/json/

结果

Django2.1.3 中间件使用详解

另一个觉用途日志记录

# 在中间件函数process_view中添加
print("path: {}; method: {}; data: {}".format(request.get_full_path(), request.method, request.body or ''))

参考: https://docs.djangoproject.com/zh-hans/2.1/topics/http/middleware/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中lambda与def用法对比实例分析
Apr 30 Python
Python正则替换字符串函数re.sub用法示例
Jan 19 Python
完美解决安装完tensorflow后pip无法使用的问题
Jun 11 Python
在python中实现同行输入/接收多个数据的示例
Jul 20 Python
python实现单链表的方法示例
Sep 03 Python
Python 3 使用Pillow生成漂亮的分形树图片
Dec 24 Python
python实现修改固定模式的字符串内容操作示例
Dec 30 Python
Python 日期与时间转换的方法
Aug 01 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
Django和Ueditor自定义存储上传文件的文件名
Feb 25 Python
Python机器学习应用之基于线性判别模型的分类篇详解
Jan 18 Python
基于Python实现nc批量转tif格式
Aug 14 Python
django+echart绘制曲线图的方法示例
Nov 26 #Python
详解配置Django的Celery异步之路踩坑
Nov 25 #Python
利用Python如何实现一个小说网站雏形
Nov 23 #Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 #Python
python+selenium实现自动抢票功能实例代码
Nov 23 #Python
3分钟学会一个Python小技巧
Nov 23 #Python
值得收藏,Python 开发中的高级技巧
Nov 23 #Python
You might like
php xml常用函数的集合(比较详细)
2013/06/06 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
php定时执行任务设置详解
2015/02/06 PHP
javascript 面向对象编程基础:封装
2009/08/21 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
python获得文件创建时间和修改时间的方法
2015/06/30 Python
python正则中最短匹配实现代码
2018/01/16 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
护士毕业生自荐信
2014/02/07 职场文书
化工操作工岗位职责
2014/04/29 职场文书
供应链金融服务方案
2014/05/25 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
商铺租房协议书范本
2014/12/04 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
同意报考证明
2015/06/17 职场文书
答谢酒会主持词
2015/07/02 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技