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 time模块用法实例详解
Sep 11 Python
Python while、for、生成器、列表推导等语句的执行效率测试
Jun 03 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
Python分治法定义与应用实例详解
Jul 28 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
python PyTorch预训练示例
Feb 11 Python
Python3中bytes类型转换为str类型
Sep 27 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
Apr 22 Python
python tkinter模块的简单使用
Apr 07 Python
Python实现文字pdf转换图片pdf效果
Apr 03 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中的integer类型使用分析
2010/07/27 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
jQuery Ajax文件上传(php)
2009/06/16 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
layui弹出层按钮提交iframe表单的方法
2018/08/20 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
Python实现的石头剪子布代码分享
2014/08/22 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
Python IDLE入门简介
2017/12/08 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
PyQt QMainWindow的使用示例
2021/03/24 Python
白酒市场开发计划书
2014/01/09 职场文书
电话客服工作职责
2014/07/27 职场文书
学生吸烟检讨书
2014/09/14 职场文书
法人授权委托书范本
2014/09/17 职场文书
组织生活会发言材料
2014/12/15 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
python 进阶学习之python装饰器小结
2021/09/04 Python