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合并两个字典的常用方法与效率比较
Jun 17 Python
Python发送form-data请求及拼接form-data内容的方法
Mar 05 Python
Mac 上切换Python多版本
Jun 17 Python
Python3实现抓取javascript动态生成的html网页功能示例
Aug 22 Python
Python魔法方法详解
Feb 13 Python
python里运用私有属性和方法总结
Jul 08 Python
TensorFlow学习之分布式的TensorFlow运行环境
Feb 05 Python
Python更新所有已安装包的操作
Feb 13 Python
Python安装OpenCV的示例代码
Mar 05 Python
Python使用plt.boxplot() 参数绘制箱线图
Jun 04 Python
python3读取文件指定行的三种方法
May 24 Python
利用python调用摄像头的实例分析
Jun 07 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实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
js 静态动态成员 and 信息的封装和隐藏
2011/05/29 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
jQuery+formdata实现上传进度特效遇到的问题
2016/02/24 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
Vue使用axios出现options请求方法
2019/05/30 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
Trunki英国官网:儿童坐骑式行李箱
2017/05/30 全球购物
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
如何唤起类中的一个方法
2013/11/29 面试题
演讲稿怎么写
2014/01/07 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
计划生育宣传标语
2014/06/21 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
防汛通知
2015/04/25 职场文书
签证扫盲贴,41个常见签证知识,需要的拿走
2019/08/09 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js
Consul在linux环境的集群部署
2022/04/08 Servers
Springboot中如何自动转JSON输出
2022/06/16 Java/Android
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript