Django 3:不确定为什么我会收到 CSRF 错误
Django 3: Unsure why I'm getting CSRF error
我正在编写 Django 应用程序,但我的注册页面出现了 403 错误:
Forbidden (403)
CSRF verification failed. Request aborted.
Reason given for failure:
CSRF token missing or incorrect.
视图如下:
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})
希望它对你有所帮助,你学到了一些新东西,快乐的编码...
我正在编写 Django 应用程序,但我的注册页面出现了 403 错误:
Forbidden (403)
CSRF verification failed. Request aborted.
Reason given for failure:
CSRF token missing or incorrect.
视图如下:
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})
希望它对你有所帮助,你学到了一些新东西,快乐的编码...