Django 3:不确定为什么我会收到CSRF错误



我正在写一个Django应用程序,我的注册页面出现403错误:

禁止(403(

CSRF验证失败。请求中止。

给出的失败原因:

CSRF令牌丢失或不正确。

以下是视图:

def register(request):
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
return render(request, "register.html", {'form' : form})

这是相关模板中的表格:

{% block content %}
<form method="POST">
{% csrf_token %}
{% for field in form %}
<p>
{{ field.label_tag }}
{{ field }}
</p>
{% endfor %}
<button type="submit" class="button">Register</button>
</form>
{% endblock %}

一些相关事实:

(1( 我的网站上没有其他页面抛出这个错误,尽管许多页面需要CSRF令牌。

(2( 我用来插入CSRF令牌的代码在这个模板中与其他模板中相同(除非我的三重检查失败(。

(3( [可能相关?]这是我直接导入到views.py中的唯一一个表单,而不首先在forms.py中进行修改。因此,views.py的两行是:

from django.contrib.auth.forms import UserCreationForm
[...]
from foo.forms import FooForm, FooBarForm, UploadFooForm

感谢所有的帮助。我已经尝试了我认为最明显的调试步骤(删除{%csrf_token%}行,读取调试输出,并确保[我认为]这些问题不适用于我,等等(

编辑:我在Django 3工作。我看到了另一个问题,并收到了关于@csrf_exempt装饰器的回复,但我相信相关的装饰器在Django 3中已经不可用了。

我提供的答案长期不可用,但为了忽略这个错误,我们可以使用django的内置装饰器方法,只需导入csrf_exempt并在显示错误的函数上方添加装饰器。

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def register(request):
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
return render(request, "register.html", {'form' : form})

希望它能帮助你,你学到了一些新的东西,快乐的编码。。。

尝试删除迁移文件和db文件,然后进行迁移并再次迁移。

最新更新