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获取GY-85九轴模块信息示例
Dec 05 Python
学习python之编写简单简单连接数据库并执行查询操作
Feb 27 Python
TensorFlow Session会话控制&Variable变量详解
Jul 30 Python
Python开发最牛逼的IDE——pycharm
Aug 01 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
Jun 19 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
详谈tensorflow gfile文件的用法
Feb 05 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
python 使用递归的方式实现语义图片分割功能
Jul 16 Python
Python map及filter函数使用方法解析
Aug 06 Python
python3 re返回形式总结
Nov 20 Python
python画条形图的具体代码
Apr 20 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模板之Phpbean的目录结构
2008/01/10 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
PHP输入流php://input介绍
2012/09/18 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
hadoop中一些常用的命令介绍
2013/06/19 PHP
细说javascript函数从函数的构成开始
2013/08/29 Javascript
JS中把字符转成ASCII值的函数示例代码
2013/11/21 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
python内置数据类型之列表操作
2018/11/12 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
python实现图片压缩代码实例
2019/08/12 Python
python tkinter组件使用详解
2019/09/16 Python
Django app配置多个数据库代码实例
2019/12/17 Python
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
上班上网检讨书
2014/01/29 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
应收账款管理制度
2015/08/06 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技