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实现合并字典的方法
Jul 07 Python
Python下Fabric的简单部署方法
Jul 14 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
Mar 05 Python
Python 爬虫之Beautiful Soup模块使用指南
Jul 05 Python
Python并发之多进程的方法实例代码
Aug 15 Python
python实现Zabbix-API监控
Sep 17 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 Python
简单了解django缓存方式及配置
Jul 19 Python
python实现翻转棋游戏(othello)
Jul 29 Python
python求质数列表的例子
Nov 24 Python
python matplotlib实现将图例放在图外
Apr 17 Python
python如何实现递归转非递归
Feb 25 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也可以?成Shell Script
2006/10/09 PHP
解决PhpStorm64不能启动的问题
2020/06/20 PHP
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
2015/03/04 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
基于Javascript实现返回顶部按钮
2016/02/29 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
Python pickle模块用法实例
2015/04/14 Python
Apache如何部署django项目
2017/05/21 Python
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
怎样声明一个匿名的内部类
2016/06/01 面试题
岗位职责定义及内容
2013/11/08 职场文书
实习生的自我评价
2014/01/08 职场文书
护士进修自我鉴定
2014/02/07 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书
基于Python实现流星雨效果的绘制
2022/03/18 Python