我有一个html表单,可以将帖子数据从另一个位置发送到django Web应用程序。如何禁用该特定表单或请求的csrf令牌检查?
答案 0 :(得分:5)
您可以将csrf_exempt
装饰器添加到视图中。
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
@csrf_exempt
def my_view(request):
return HttpResponse('Hello world')
答案 1 :(得分:1)
您在评论中提到了Crispyform。如果您正在使用FormHelper函数,那么解决方案是更改以设置disable_csrf属性。
class ExampleForm(forms.Form):
def __init__(self, *args, **kwargs):
super(ExampleForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.disable_csrf = True
有关详细信息,请参阅此处:http://django-crispy-forms.readthedocs.org/en/latest/form_helper.html
如果这给你带来任何麻烦,请查看他们的test.py文件:http://pydoc.net/Python/django-crispy-forms/1.3.0/crispy_forms.tests.tests/
具体做法是:
def test_disable_csrf(self):
form = TestForm()
helper = FormHelper()
helper.disable_csrf = True
html = render_crispy_form(form, helper, {'csrf_token': _get_new_csrf_key()})
self.assertFalse('csrf' in html)