【问题标题】:Django - Forbidden (CSRF token missing or incorrect.)Django - 禁止(CSRF 令牌丢失或不正确。)
【发布时间】:2019-11-24 17:01:39
【问题描述】:

我在创建使用 {% csrf_token%} 的简单表单时遇到问题。

带表格的模板:

<form action="{% url 'library:my_view' %}" method="post">
   {% csrf_token %}
   <input type="submit" value="Submit">
</form>

urls.py

urlpatterns = [
        # ...
        path('some_page', views.my_view, name='my_view'),
]

views.py

def my_view(request):
        used_method = str(request.method)
        return render(request, 'library/some_template.html', {'test': used_method})

带有结果的模板 (some_template.html):

{{test}}

服务器给我消息:

禁止(CSRF 令牌丢失或不正确。):/Library/some_page
"POST / library / some_page HTTP / 1.1" 403 2513

或(当我使用不同的浏览器时):

禁止(未设置 CSRF cookie。):/library/some_page
"POST /library/some_page HTTP/1.1" 403 2868

当我禁用 @csrf_exempt 装饰器的保护时,表单可以正常工作。哪里出了问题?

如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 你的设置 MIDDLEWARE 列表中有 ''django.middleware.csrf.CsrfViewMiddleware'' 吗?
  • 是的,我愿意。这是默认设置。我没改。
  • 您的settings.py 中是否有CSRF_COOKIE_SECURE=True 并通过http 而不是https 访问您的开发服务器?
  • 不知道,你的代码没问题,可能是一些设置、缓存或类似的
  • CSRF_COOKIE_SECURE = True/False - 没有区别 SESSION_COOKIE_SECURE = True/False - 没有区别 SECURE_SSL_REDIRECT = False - 没有区别,True - 访问 HTTPS,我根本无法与 localhost 连接。

标签: python django


【解决方案1】:

在这里您正在创建一个空表单。你在表单中呈现什么?您是否创建了任何 forms.py 文件?

<form action="{% url 'library:my_view' %}" method="post">
   {% csrf_token %}
   <input type="submit" value="Submit">
</form>

【讨论】:

  • 我没有创建任何表单。 .py 文件。我正在使用 Django 2.2 教程,还没有介绍这个文件。我使用了一个空表格,因为我想用最简单的例子来解释我的问题。有关系吗?当我添加做某事的输入时,问题看起来是一样的。如果我使用 @csrf_exempt 并且在启用令牌的情况下不起作用,则该表单有效。
猜你喜欢
  • 2021-01-08
  • 2015-10-15
  • 2020-12-24
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 2019-02-21
  • 2020-06-16
相关资源
最近更新 更多