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编写简单的画图板程序的示例教程
Dec 08 Python
详细解读tornado协程(coroutine)原理
Jan 15 Python
python测试mysql写入性能完整实例
Jan 18 Python
简单实现python数独游戏
Mar 30 Python
使用Python开发SQLite代理服务器的方法
Dec 07 Python
python实现石头剪刀布程序
Jan 20 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
Python使用Pandas库常见操作详解
Jan 16 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 Python
教你如何用python开发一款数字推盘小游戏
Apr 14 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
Protoss兵种介绍
2020/03/14 星际争霸
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
PHP超全局变量实现原理及代码解析
2020/09/01 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
如何在Angular2中使用jQuery及其插件的方法
2017/02/09 Javascript
React中jquery引用的实现方法
2017/09/12 jQuery
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
python利用lxml读写xml格式的文件
2017/08/10 Python
Scrapy的简单使用教程
2017/10/24 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
Python之修改图片像素值的方法
2019/07/03 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
项目开发计划书
2014/01/09 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
贷款委托书怎么写
2014/08/02 职场文书
JS实现简单的九宫格抽奖
2022/06/28 Javascript