gpt4 book ai didi

django - 将响应发送到客户端后在 Django 中执行代码

转载 作者:可可西里 更新时间:2023-11-01 15:06:06 25 4
gpt4 key购买 nike

在我的 Django 应用程序中,我想跟踪响应是否已成功发送到客户端。我很清楚在像 HTTP 这样的无连接协议(protocol)中没有“无懈可击”的方式来确保客户端已经收到(并显示)响应,所以这不是关键任务功能,但我仍然想在最晚的可能时间。响应将不是 HTML,因此来自客户端的任何回调(使用 Javascript 或 IMG 标签等)都是不可能的。

我能找到的“最新” Hook 是在中间件列表的第一个位置添加一个实现 process_response 的自定义中间件,但据我所知,这是在构建实际响应并发送给客户端之前执行的。 Django 中是否有任何钩子(Hook)/事件可以在成功发送响应后执行代码?

最佳答案

我目前要使用的方法使用 HttpResponse 的子类:

from django.template import loader
from django.http import HttpResponse

# use custom response class to override HttpResponse.close()
class LogSuccessResponse(HttpResponse):

def close(self):
super(LogSuccessResponse, self).close()
# do whatever you want, this is the last codepoint in request handling
if self.status_code == 200:
print('HttpResponse successful: %s' % self.status_code)

# this would be the view definition
def logging_view(request):
response = LogSuccessResponse('Hello World', mimetype='text/plain')
return response

通过阅读 Django 代码,我非常确信 HttpResponse.close() 是将代码注入(inject)请求处理的最新点。我不确定与上述方法相比,这种方法是否真的可以更好地处理错误情况,所以我暂时保留这个问题。

与 lazerscience 的回答中提到的其他方法相比,我更喜欢这种方法的原因是它可以单独在 View 中设置,不需要安装中间件。另一方面,使用 request_finished 信号不允许我访问响应对象。

关于django - 将响应发送到客户端后在 Django 中执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4313508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com