CSRF验证失败。请求被中止。关于django
我关注Django1.3Web开发。对于登录,我得到以下错误CSRF验证失败。请求被中止。关于django,django,django-views,django-registration,Django,Django Views,Django Registration,我关注Django1.3Web开发。对于登录,我得到以下错误 Forbidden (403) CSRF verification failed. Request aborted. Help Reason given for failure: CSRF token missing or incorrect. 这是我的settings.py包含的应用程序。这正是书中所说的 INSTALLED_APPS = ( 'django.contrib.auth', 'django.c
Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
CSRF token missing or incorrect.
这是我的settings.py包含的应用程序。这正是书中所说的
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'djangocricket.Cricket',
'djangocricket.cms'
)
这本书说,它应该包含,django.contrib.auth.views.login。。我把它包括在
urlpatterns = patterns('',
# Examples:
url(r'^$', 'djangocricket.Cricket.views.index', name='default'),
url(r'^user/(\w+)/$', 'djangocricket.Cricket.views.user_home', name='user home'),
url(r'^login/$', 'django.contrib.auth.views.login'),
# url(r'^djangocricket/', include('djangocricket.foo.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
#url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^news/', 'djangocricket.cms.views.index', name='index'),
#url(r'^news/(?P<slug>[^\.]+).html', 'djangocricket.cms.views.detail', name='get_single_news_item'),
url(r'^admin/', include(admin.site.urls)),
)
urlpatterns=patterns(“”,
#示例:
url(r'^$','djangocket.Cricket.views.index',name='default'),
url(r“^user/(\w+/$”,“djangocket.Cricket.views.user_home”,name='user home'),
url(r“^login/$”、“django.contrib.auth.views.login”),
#url(r“^djangocket/”,包括('djangocket.foo.url'),
#取消注释下面的admin/doc行以启用管理员文档:
#url(r“^admin/doc/”,包括('django.contrib.admindocs.url'),
#取消注释下一行以启用管理员:
url(r“^news/”、“djangocket.cms.views.index”、name='index'),
#url(r'^news/(?P[^\.]+).html',djangocket.cms.views.detail',name='get_single_news_item'),
url(r“^admin/”,包括(admin.site.url)),
)
还有我的注册/login.html。。。从书上粘贴下来的副本。应该可以
<html>
<head>
<title>Django Bookmarks - User Login</title>
</head>
<h1>User Login</h1>
{% if form.errors %}
<p>Your username and password didn't match.
Please try again.</p>
{% endif %}
<form method="post" action=".">
<p><label for="id_username">Username:</label>
{{ form.username }}</p>
<p><label for="id_password">Password:</label>
{{ form.password }}</p>
<input type="hidden" name="next" value="/" />
<input type="submit" value="login" />
</form>
</body>
</html>
Django书签-用户登录
用户登录
{%if form.errors%}
您的用户名和密码不匹配。
请再试一次
{%endif%}
用户名:
{{form.username}
密码:
{{form.password}}
我缺少什么?您需要将
{%csrf\u token%}
模板标记添加为Django模板中表单
元素的子元素
这样,模板将呈现一个值设置为CSRF标记的隐藏元素。当Django服务器收到表单请求时,Django将验证令牌是否与表单中呈现的值匹配。这对于确保POST请求(即数据更改请求)源自真实的客户端会话是必要的
有关更多信息,请查看Django文档,网址为:
以下是跨站点请求伪造攻击的概述:
如果您正在使用
csrf\u令牌
模板标记,且问题未得到解决,请检查csrf\u COOKIE\u域
设置。您应该在开发环境中将其设置为None
。只是想提供有关该主题的其他信息。如果这种情况发生在您身上,并且您确信已将令牌注入表单中,并且视图函数正在正确处理一切,但问题仍然存在。确保没有禁用输入字段的javascript代码。发生在我身上,经过几个小时的调试,终于意识到
<input type="hidden" name="csrfmiddlewaretoken" value="pHK2CZzBB323BM2Nq7DE2sxnQoBG1jPl" disabled="">
我也有同样的问题。我在添加{%csrf_token%}时解决了这个问题。最后,我的代码是:
<form id='formulario2' method='post' action='>
<h3>Enter:</h3>
{% csrf_token %}
<input id="id_mesaje" name="mesaje" type="email" placeholder="E-mail"/>
<input type='submit' name="boton2" value='Suscribete' style="display:inline-block;background-color: #80e174; "/>
</form>
在你的表格里。这对我来说是可行的。那么,我们为什么要使用跨站点请求伪造
答案很简单,它只是在您的网页上添加了另一个安全层,任何恶意用户都无法使用错误的令牌验证请求。如果您的开发服务器没有ssl,请检查CSRF\u COOKIE\u SECURE
;提交表单时,禁用的
表单元素的值不会发送到服务器。如果有人需要避免CSRF验证
(出于某些原因),可能会很有用
{% csrf_token %}