【发布时间】: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 连接。