15

CSRFトークンを必要としないPOSTを受け取るDjangoビューがあります。したがって@csrf_exempt、ビューでデコレータを使用しました。問題は、ビューから応答を発行しない場合があることです (これは Twitter ボットであり、すべてのツイートに対して HTTP POST を受信し、すべてのツイートに応答したくありません)。応答を発行しないと、次のエラーが表示されます。

Traceback (most recent call last):

 File "/home/adam/webapps/newman/lib/python2.5/django/core/handlers/base.py", line 100, in get_response
   response = callback(request, *callback_args, **callback_kwargs)

 File "/home/adam/webapps/newman/lib/python2.5/django/views/decorators/csrf.py", line 24, in wrapped_view
   resp.csrf_exempt = True

AttributeError: 'NoneType' object has no attribute 'csrf_exempt'

resp (これは応答だと思います) は None です。なぜなら、ビューはただreturn. このエラーを回避し、POST で CSRF トークンを要求しないようにするにはどうすればよいですか。

ありがとう!

4

2 に答える 2

9

私はあなたがすでにあなたの答えを得ていることを知っています、そして確かにネッドは正しいです。それに加えて、Django が実際にビューが応答を返すことを期待しているだけでなく、クライアントも! これは HTTP エラーであり、何かを返さないことはおそらくリソースの浪費です (したがって、すぐに接続を閉じます)。

この状況で使用する適切な http コードは、204 No Content または 304 Not modified ( HTTP ステータス コードを参照) であると思います。ジャンゴで:

return HttpResponse(status=204)

また

from django.http import HttpResponseNotModified
return HttpResponseNotModified()
于 2010-12-13T13:39:50.743 に答える
7

Django は実際には、ビュー関数が応答を返すことを期待しています。None の代わりに空の応答を返すことはできますか? または、HTTP エラー コードを返しますか?

于 2010-07-17T00:17:56.737 に答える