我有一个Django视图,它接收不需要拥有CSRF令牌的POST。因此我在视图上使用了@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令牌。
谢谢!
答案 0 :(得分:9)
我知道你已经得到了答案,而且Ned确实是对的。 但除此之外:不仅Django真的希望视图返回响应,您的客户也是!这是一个HTTP错误,并且可能浪费资源而不返回某些东西(从而立即关闭连接)!
我认为204 No Content或304 Not modified(参见:HTTP Status Codes)是适用于这种情况的http代码;在django中:
return HttpResponse(status=204)
或
from django.http import HttpResponseNotModified
return HttpResponseNotModified()
答案 1 :(得分:7)
Django真的希望视图函数返回响应。也许你可以返回空响应而不是None?或者返回HTTP错误代码?