python - 在 Django / Python 中从头到尾跟踪单个请求
问题描述
Django 中有没有办法从头到尾唯一地跟踪单个请求?具体来说。我想知道 BeforeViewMiddleware 中的请求与 ResponseMiddleware 中的请求相同。
目前我使用request.session:
# executes at start of processing
class BeforeViewMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
id = insert_data_into_table()
request.session["id"] = id
# executes when all processing is done
class ResponseMiddleware(object):
def process_response(self, request, view_func, view_args, view_kwargs):
# Match the request with the request in BeforeViewMiddleware
id = request.session["id"]
update_table(id)
但是,如果大约在同一时间从同一会话发出两个或多个请求,则此操作会失败。然后它变成了竞争条件,首先开始的可能最后完成,并且 ID 混淆了。
解决方案
为什么不在请求本身上使用具体属性:
class BeforeViewMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
id = ...
request._unik_attr = id
class ResponseMiddleware(object):
def process_response(self, request, view_func, view_args, view_kwargs):
id = request._unik_attr
# ...
与会话不同,请求对象仅存在于单个请求-响应-周期。
推荐阅读
- python - numpy 随机选择返回浮点数
- r - 无法从 R 在 S3 存储桶中写入 csv 文件
- sap-cloud-sdk - 使用 SDK 创建销售订单时出现错误消息“处理资源时出错”的 Http 状态 500
- wordpress - 编辑 ACF 字段组后未显示新/编辑的字段
- javascript - 替换数字中的点
- javascript - 如何读取 URL 中带有“&”符号的哈希?
- java - 处理:未使用的代码出错
- python - 在 Django 中使用中间件重定向 ERR_TOO_MANY_REDIRECTS
- java - 有没有办法批量处理一个方法而不是在java中多次调用它
- javascript - 将内联网格编辑实现为全局功能