我现在要使用的方法使用 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() 是将代码注入请求处理的最新点。我不确定与上述方法相比,这种方法是否真的能更好地处理错误情况,所以我暂时将这个问题留待解决。
我更喜欢这种方法而不是 lazerscience 的回答中提到的其他方法的原因是它可以单独在视图中设置,不需要安装中间件。另一方面,使用 request_finished 信号不允许我访问响应对象。