Метод, который я сейчас использую, использует подкласс 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, с другой стороны, не позволило бы мне получить доступ к объекту ответа.