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的几种开发工具介绍
Mar 07 Python
python中的多线程实例教程
Aug 27 Python
从Python程序中访问Java类的简单示例
Apr 20 Python
Python中functools模块函数解析
Mar 12 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
python实现字符串和字典的转换
Sep 29 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
Python3 关于pycharm自动导入包快捷设置的方法
Jan 16 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
Python从文件中读取数据的方法讲解
Feb 14 Python
python3 字符串知识点学习笔记
Feb 08 Python
python实现最短路径的实例方法
Jul 19 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
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2010/11/23 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
DWR中各种java方法的调用
2016/05/04 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
js html实现计算器功能
2018/11/13 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
Python自动发邮件脚本
2017/03/31 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
详解TensorFlow查看ckpt中变量的几种方法
2018/06/19 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
怎样客观的做好自我评价
2013/12/28 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
2015世界地球日活动总结
2015/02/09 职场文书
基督教追悼会答谢词
2015/09/29 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
Python爬虫之爬取某文库文档数据
2021/04/21 Python
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python