我正在使用这个tutorial尝试创建一个django登录应用程序(超级简单的东西......)
这是我在模板中最终得到的代码( index.html
)
<div id="login-box">
{{ state }}
<form class="login-widgets" action="/login/" method="post">
{% if next %}
<input class="login-widgets-text" type="hidden" name="next" value="{{ next }}" />
{% endif %}
Username :
<input class="login-widgets-text" type="text" name="username" value="{{ username}}" />
Password :
<input type="password" name="password" value="" />
<input class="login-button" type="submit" value="Log In" />
</form>
<!--<div class="login-widgets">
<p>Username : ___________</p>
<p>Password : ___________</p>
</div>-->
</div>
这就是教程告诉我要添加到我的应用程序 views.py
页面:
def login_user(request):
state = "Please log in below..."
username = password = ''
if request.POST:
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
state = "You're successfully logged in!"
else:
state = "Your account is not active, please contact the site admin."
else:
state = "Your username and/or password were incorrect."
return render_to_response('index.html',{'state':state, 'username': username})
我完全按照教程和django文档中的描述设置我的测试数据库,但我的登录仍然在浏览器中出现此错误:
Forbidden (403)
CSRF verification failed. Request aborted.
我不明白CSRF验证意味着什么 - 在我的 settings.py
中我已经设置了以下MIDDLEWARE_CLASSES:
MIDDLEWARE_CLASSES =('django.middleware.common.CommonMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django .contrib.messages.middleware.MessageMiddleware',#取消注释简单点击劫持保护的下一行:#'django.middleware.clickjacking.XFrameOptionsMiddleware',)
但我不确定如何验证CSRF并验证登录 . 据我所知,数据库超级用户和上面的代码看起来是正确的,除了我不知道如何添加CSRF验证 . 非常感谢你的帮助!
1 回答
在表单中添加
{% csrf_token %}
. 它将被一个带键的隐藏输入所取代 .一步一步documentation .
概念explanation .