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脚本和ADB命令实现卸载App
Feb 10 Python
Python实现重建二叉树的三种方法详解
Jun 23 Python
Python实现快速傅里叶变换的方法(FFT)
Jul 21 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
pycharm 配置远程解释器的方法
Oct 28 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
python对常见数据类型的遍历解析
Aug 27 Python
Python数据库小程序源代码
Sep 15 Python
用python画一只可爱的皮卡丘实例
Nov 21 Python
Python对Tornado请求与响应的数据处理
Feb 12 Python
python 基于opencv去除图片阴影
Jan 26 Python
python函数的两种嵌套方法使用
Apr 02 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利用header跳转失效的解决方法
2014/10/24 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
PHP new static 和 new self详解
2017/02/19 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
用JavaScript脚本实现Web页面信息交互
2006/10/11 Javascript
JavaScript 全角转半角部分
2009/10/28 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
JavaScript异步回调的Promise模式封装实例
2014/06/07 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
python实现FTP服务器服务的方法
2017/04/11 Python
Python3中使用PyMongo的方法详解
2017/07/28 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
实习自我评价怎么写
2013/12/02 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
任命书模板
2014/06/04 职场文书
感动中国何玥观后感
2015/06/02 职场文书
投诉书范文
2015/07/02 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python
PHP中strval()函数实例用法
2021/06/07 PHP
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python