私が今行っているメソッドは、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シグナルを使用すると、応答オブジェクトにアクセスできなくなります。