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 03 Python
python显示生日是星期几的方法
May 27 Python
Python实现 多进程导入CSV数据到 MySQL
Feb 26 Python
Python2与python3中 for 循环语句基础与实例分析
Nov 20 Python
用python实现百度翻译的示例代码
Mar 09 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
Win10下Python3.7.3安装教程图解
Jul 08 Python
django中上传图片分页三级联动效果的实现代码
Aug 30 Python
Python小整数对象池和字符串intern实例解析
Mar 21 Python
关于python的缩进规则的知识点详解
Jun 22 Python
pandas提升计算效率的一些方法汇总
May 30 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实现网站插件机制的方法
2009/11/10 PHP
PHP 时间日期操作实战
2011/08/26 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
PHP getName()函数讲解
2019/02/03 PHP
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
jquery设置表单元素为不可用的简单代码
2016/07/04 Javascript
python 合并文件的具体实例
2013/08/08 Python
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
python中实现k-means聚类算法详解
2017/11/11 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
Python格式化输出%s和%d
2018/05/07 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
python爬虫工具例举说明
2020/11/30 Python
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
康拓普公司Java笔面试
2016/09/23 面试题
门诊手术室工作制度
2014/01/30 职场文书
销售队伍口号
2014/06/11 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
病危通知书样本
2015/04/17 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
python基于opencv批量生成验证码的示例
2021/04/28 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python