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模拟随机游走图形效果示例
Feb 06 Python
Python使用pylab库实现绘制直方图功能示例
Jun 01 Python
详解python中的Turtle函数库
Nov 19 Python
Python实现12306火车票抢票系统
Jul 04 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
Jul 11 Python
django和vue实现数据交互的方法
Aug 21 Python
python实现tail实时查看服务器日志示例
Dec 24 Python
Python class的继承方法代码实例
Feb 14 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
记一次Django响应超慢的解决过程
Sep 17 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 Python
什么是Python装饰器?如何定义和使用?
Apr 11 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 中文和编码判断代码
2010/05/16 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
destoon之一键登录设置
2014/06/21 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
python中Flask框架简单入门实例
2015/03/21 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
Python 使用多属性来进行排序
2019/09/01 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
Python之字典添加元素的几种方法
2020/09/30 Python
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
什么是GWT的Module
2013/01/20 面试题
企划主管岗位职责
2013/12/12 职场文书
毕业设计说明书
2014/05/07 职场文书
给老婆的保证书
2015/01/16 职场文书
意向协议书
2015/01/27 职场文书
中考学习决心书
2015/02/04 职场文书