Django CSRF cookie未设置。卡住

问题描述:

我正在学习Django和我为此购买了一本书。我尝试使用方法=“post”为表单创建连接系统。当我提交的CSRF cookie没有设置等...我在论坛上看到很多类似的问题,但仍然有点卡住,因为我不明白所有的答案,我还没有找到一些工作,例外@csrf_exempt但我看到它就像禁用了这些东西,这不是一个好主意。下面的代码:Django CSRF cookie未设置。卡住

我的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 != '[email protected]': 
       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') 

如果需要的话我还可以显示我的设置。和一个错误messahe的屏幕如果它可以帮助太。

P.S:我知道这里已经有很多东西了,但是我被困住了,一些个人帮助对我来说很好理解它来自何处。

+0

不确定它是否相关,但在代码中没有看到“”。 – roganjosh

+0

他是我忘记选择它时,我复制了代码 – SamHel

您的模板尝试呈现{% csrf_token %},但如果没有访问请求,它将无法完成。要通过在请求模板,用render()替换render_to_response()

@csrf_protect 
def login(request): 
    ... 
    return render(request, 'login.html') 

它不推荐使用render_to_response()了:

此功能之前引进渲染(中)和工作方式类似,只是它不会在响应中提供请求。这不被推荐,将来可能会被弃用。

+0

它工作完美,非常感谢你!我跟着一本旧书,但我没有看到内容有点老旧的事实。 – SamHel