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 相关文章推荐
Python3中条件控制、循环与函数的简易教程
Nov 21 Python
python通过getopt模块如何获取执行的命令参数详解
Dec 29 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
Mar 08 Python
Python实现的tcp端口检测操作示例
Jul 24 Python
python的turtle库使用详解
May 10 Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 Python
Python读取JSON数据操作实例解析
May 18 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
python实现简单的tcp 文件下载
Sep 16 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 Python
正确的理解和使用Django信号(Signals)
Apr 14 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
如何实现JS函数的重载
2006/09/22 Javascript
jquery 指南/入门基础
2007/11/30 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
2020/12/24 Javascript
python实现计算倒数的方法
2015/07/11 Python
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
python实现简易淘宝购物
2019/11/22 Python
Python 实现Numpy中找出array中最大值所对应的行和列
2019/11/26 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
公司管理建议书范文
2014/03/12 职场文书
租房协议书范本
2014/04/09 职场文书
销售人才自我评价范文
2014/09/27 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
文明班级申报材料
2014/12/24 职场文书
QT与javascript交互数据的实现
2021/05/26 Javascript
详解Redis集群搭建的三种方式
2021/05/31 Redis
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA