我正在学习如何工作Django和我为此买了一本书。我尝试使用method =“post”为表单建立连接系统。当我提交时,CSRF cookie没有设置等...我在论坛上看到了很多类似的问题,但仍然有点卡住,因为我不明白所有的答案,我没有找到除了@csrf_exempt之外有效的东西但是我看到它就像禁用了这些东西,这不是一个好主意。这是代码:
我的html login.html页面:
<form action="." method="post">{% csrf_token %}
{% if error %}
<p class="error">{{ error }}</p>
{% endif %}
<p>
<label for="email">E-mail :</label>
<input name="email" id="email" size="30" type="email" />
</p>
<p>
<label for="password">Password :</label>
<input name="password" id="password" size="30" type="password" />
</p>
<p>
<input type="submit" value="Log-in" />
<a href="">Créer un compte</a>
</p>
我的views.py:
from django.shortcuts import render_to_response
from datetime import datetime
from django.views.decorators.csrf import csrf_protect
from django.http.response import HttpResponseRedirect
# from django.http import HttpResponseRedirect
def welcome(request):
return render_to_response('welcome.html',
{'curent_date_time' : datetime.now})
@csrf_protect
def login(request):
if len(request.POST) > 0:
if 'email' not in request.POST or 'password' not in request.POST:
error = "Veuillez entrer un adresse mail et un mot de passe."
return render_to_response('login.html', {'error': error})
else:
email = request.POST['email']
password = request.POST['password']
if password != 'sesame' or email != 'pierre@lxs.be':
error = "Adresse de couriel ou mot de passe errone."
return render_to_response('login.html', {'error': error})
else:
return HttpResponseRedirect('welcome/')
else:
return render_to_response('login.html')
如果需要,我也可以显示我的设置。并且错误消息的屏幕如果它也可以帮助。
P.S:我知道已经有很多东西了,但是我被困住了,一些个人的帮助对我来说很有用,可以从中找到它。答案 0 :(得分:2)
您的模板尝试呈现{% csrf_token %}
,但如果没有访问请求则无法执行此操作。要将请求传递给模板,请将render_to_response()
替换为render()
:
@csrf_protect
def login(request):
...
return render(request, 'login.html')
不建议再使用render_to_response()
:
此函数在引入render()之前,其工作方式类似,但它不会使响应中的请求可用。不建议这样做,将来可能会被弃用。