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的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
Python对小数进行除法运算的正确方法示例
Aug 25 Python
SQLite3中文编码 Python的实现
Jan 11 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
Jan 04 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
Jun 11 Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 Python
简单了解python反射机制的一些知识
Jul 13 Python
python 实现return返回多个值
Nov 19 Python
Python实现一个优先级队列的方法
Jul 31 Python
Python如何实现机器人聊天
Sep 10 Python
Django正则URL匹配实现流程解析
Nov 13 Python
python 录制系统声音的示例
Dec 21 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短址转换实现方法
2015/02/25 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
jQuery表单域选择器用法分析
2015/02/10 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
常用python编程模板汇总
2016/02/12 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
Django实现表单验证
2018/09/08 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
在python中实现求输出1-3+5-7+9-......101的和
2020/04/02 Python
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
优秀中专生推荐信
2013/11/17 职场文书
毕业生自荐信
2013/12/14 职场文书
幼儿园教师培训制度
2014/01/16 职场文书
一份创业计划书范文
2014/02/08 职场文书
军训学生自我鉴定
2014/02/12 职场文书
升学宴答谢词
2015/01/05 职场文书
闪闪红星观后感
2015/06/08 职场文书
初中语文教学反思范文
2016/03/03 职场文书
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL