当前位置:  开发笔记 > 编程语言 > 正文

为不总是有响应的视图禁用Django CSRF

如何解决《为不总是有响应的视图禁用DjangoCSRF》经验,为你挑选了2个好方法。

我有一个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令牌.

谢谢!



1> Stefano..:

我知道你已经得到了答案,而且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()



2> Ned Batcheld..:

Django真的希望视图函数返回响应.也许你可以返回空响应而不是None?或者返回HTTP错误代码?

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有