为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

当年话下 2022-11-01 15:05:52
我正在编写一个 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 中不再可用。
查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

我提供的答案不能长期使用,但是为了忽略这个错误,我们可以使用 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})

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


查看完整回答
反对 回复 2022-11-01
?
青春有我

TA贡献1784条经验 获得超8个赞

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



查看完整回答
反对 回复 2022-11-01
  • 2 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信