Django2.1.3 中间件使用详解
作者:ilyq 时间:2023-11-06 19:46:00
环境
Win10
Python3.6.6
Django2.1.3
中间件作用 中间件用于全局修改Django的输入或输出。
中间件常见用途
缓存
会话认证
日志记录
异常
中间件执行流程
全局异常捕捉实现
创建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/
结果
另一个觉用途日志记录
# 在中间件函数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