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 相关文章推荐
深入flask之异步非堵塞实现代码示例
Jul 31 Python
python3 读取Excel表格中的数据
Oct 16 Python
python 处理数字,把大于上限的数字置零实现方法
Jan 28 Python
python利用tkinter实现屏保
Jul 30 Python
在Python中画图(基于Jupyter notebook的魔法函数)
Oct 28 Python
使用python的turtle绘画滑稽脸实例
Nov 21 Python
python脚本后台执行方式
Dec 21 Python
Selenium基于PIL实现拼接滚动截图
Apr 10 Python
python3.6使用SMTP协议发送邮件
May 20 Python
Python引入多个模块及包的概念过程解析
Sep 21 Python
Python中使用ipython的详细教程
Jun 22 Python
Python可变集合和不可变集合的构造方法大全
Dec 06 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
一个简易需要注册的留言版程序
2006/10/09 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
php实现简单的权限管理的示例代码
2017/08/25 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
jQuery插件boxScroll实现图片轮播特效
2015/07/14 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
2018/01/09 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
Python FTP操作类代码分享
2014/05/13 Python
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
python生成九宫格图片
2018/11/19 Python
Python assert关键字原理及实例解析
2019/12/13 Python
Python yield的用法实例分析
2020/03/06 Python
英国儿童鞋和靴子:Start-Rite
2019/05/06 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
GWT (Google Web Toolkit)有哪些主要的原件组成?
2015/06/08 面试题
会计主管岗位职责范文
2013/11/08 职场文书
初中三好学生事迹材料
2014/01/13 职场文书
讲座主持词
2014/03/20 职场文书
竞选宣传委员演讲稿
2014/05/24 职场文书
2015年教务工作总结
2015/05/23 职场文书
小组口号霸气押韵
2015/12/24 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书