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批量按比例缩小图片脚本分享
May 21 Python
Django框架下在视图中使用模版的方法
Jul 16 Python
教大家使用Python SqlAlchemy
Feb 12 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
Oct 09 Python
python中将正则过滤的内容输出写入到文件中的实例
Oct 21 Python
详解如何用django实现redirect的几种方法总结
Nov 22 Python
Python3 导入上级目录中的模块实例
Feb 16 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
python numpy实现rolling滚动案例
Jun 08 Python
Python和Bash结合在一起的方法
Nov 13 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 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 session和cookie使用说明
2010/04/07 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
详解thinkphp中的volist标签
2018/01/15 PHP
Thinkphp集成抖音SDK的实现方法
2020/04/28 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
jquery选择器简述
2015/08/31 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
常用的Javascript设计模式小结
2015/12/09 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
Python实现可自定义大小的截屏功能
2018/01/20 Python
Python实现的堆排序算法示例
2018/04/29 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
python中如何进行连乘计算
2020/05/28 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
2015年公务员工作总结
2015/04/24 职场文书
升学宴家长答谢词
2015/09/29 职场文书
56句经典英文座右铭
2019/08/09 职场文书
SQL SERVER中的流程控制语句
2022/05/25 SQL Server
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python