【问题标题】:Django why i still got CSRF verification failed?Django为什么我仍然得到CSRF验证失败?
【发布时间】:2013-07-27 11:40:10
【问题描述】:

我的模板如下:

  <div id="divLogin">
                {% block login %}
                <form action="/login" method="post">
                    {% csrf_token %}
                    <label for="id_name"></label><input type="text" name="email" id="id_name" placeholder="Your Email">
                    <label for="id_pass"></label><input type="password" name="password" placeholder="Your Password">
                    <input type="submit" id="btnLogin" value="Log In" class="btn">
                </form>
                {% endblock %}
            </div>

我已经在模板中添加了{% csrf_token %},我的登录视图是

def login_view(request):
    if request.method == 'POST':
        useremail=request.POST['email']
        password=request.POST['password']
        try:
            user=User.objects.get(email=useremail)
            if user.check_password(password):
                uAuth=authenticate(username=user.username,password=password)
                login(request,uAuth)
                return render_to_response("blog.html",{'loginuser':user},context_instance=RequestContext(request))
        except User.DoesNotExist:
            return redirect('/')
    return redirect('/')

即使我使用了render_to_responseRequestContext,我仍然遇到错误。 有一件事很连贯,我在 login_view 方法中设置了一个断点,但是在它进入 login_view 方法之前 csrf 错误指出。所以这个方法没有回应?

我的代码有什么问题吗?

我在 settings.py 中的 MIDDLEWARE_CLASSES 中添加了 django.middleware.csrf.CsrfViewMiddleware

【问题讨论】:

  • 你能粘贴完整的traceback吗?
  • 你没有处理GET请求?
  • @VictorCastilloTorres 我无法获得回溯,CSRF verification failed 在进入 Login_view 方法之前显示错误。 @Rohan,处理 GET 请求是什么意思?
  • 是丢失的token还是不正确的token?

标签: django django-forms django-csrf


【解决方案1】:

你必须在post之后使用重定向。

重定向到呈现模板的视图。

def login_view(request):
    if request.method == 'POST':
        useremail=request.POST['email']
        password=request.POST['password']
        try:
            user=User.objects.get(email=useremail)
            if user.check_password(password):
                uAuth=authenticate(username=user.username,password=password)
                login(request,uAuth)
                return HttpResponseRedirect('/someurl')
        except User.DoesNotExist:
             return redirect('/')
    else:
        return render_to_response('login.html',context_instance=RequestContext(request))


def someurl(request):
    if request.method == 'GET':
         render_to_response("blog.html",    
               {'loginuser':user},context_instance=RequestContext(request))

【讨论】:

  • 我试试你的方法,还是不行。似乎从未执行过 login_view 方法,因为我无法对其进行调试。我不知道是什么问题。
  • 上面的模板是怎么渲染的?可以发完整图吗?
猜你喜欢
  • 2012-01-19
  • 2011-09-09
  • 2012-09-08
  • 2015-06-02
  • 1970-01-01
  • 2020-09-02
相关资源
最近更新 更多