Django2.1.3 中间件使用详解

作者:ilyq 时间:2023-11-06 19:46:00 

环境

  • 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/

来源:https://www.jianshu.com/p/0b35e71a8483

标签:Django2,中间件
0
投稿

猜你喜欢

  • python解决方案:WindowsError: [Error 2]

    2022-07-09 00:11:34
  • 在ASP.NET 2.0中操作数据之三十一:使用DataList来一行显示多条记录

    2024-05-11 09:30:00
  • vue router 动态路由清除方式

    2024-05-08 10:12:22
  • 关于设计的一些个人看法

    2008-06-12 12:44:00
  • vue动态菜单、动态路由加载以及刷新踩坑实战

    2024-05-05 09:25:27
  • Python OpenCV直方图均衡化详解

    2022-11-03 17:35:35
  • PyQt5每天必学之创建窗口居中效果

    2022-02-16 19:03:49
  • 教你利用Selenium+python自动化来解决pip使用异常

    2022-11-17 18:49:08
  • 几个简单的基本的sql语句

    2024-01-20 18:55:58
  • 解决python明明pip安装成功却找不到包的问题

    2021-05-21 14:50:40
  • 对pycharm 修改程序运行所需内存详解

    2022-10-23 09:14:58
  • PyQt+socket实现远程操作服务器的方法示例

    2022-07-19 01:56:13
  • Python中的列表及其操作方法

    2022-05-24 06:19:41
  • SQL Server数据库重命名、数据导出的方法说明

    2024-01-22 05:51:45
  • SQL 重复记录问题的处理方法小结

    2024-01-16 14:56:36
  • Golang实现AES对称加密的过程详解

    2024-01-31 06:44:22
  • Python内建类型dict深入理解源码学习

    2021-11-12 21:12:29
  • Ajax的错误处理机制探讨

    2007-09-07 09:53:00
  • 永恒之蓝实战教程之Mac通过Metasploit攻击Server2008的详细过程

    2022-08-01 05:41:26
  • 用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例

    2023-11-27 01:27:23
  • asp之家 网络编程 m.aspxhome.com