0

我不知道如何解决这个 CSRF 失败。我已经包含了我一直在阅读的 {% csrf_token %} ,但它仍然给我这个错误。这是代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Log in</title>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <style>
        body{
        font-family:Arial,Helvetica,sans-serif;
            font-size: 12px;
        }
    </style>
    </head>
    <body>
        {{ state }}
        <form action="/login/" method="post">{% csrf_token %}
            {% if next %}
            <input type="hidden" name="next" value="{{ next }}" />
            {% endif %}
            username:
            <input type="text" name="username" value="{{ username}}" /><br />
            password:
            <input type="password" name="password" value="" /><br />

            <input type="submit" value="Log In" />
        </form>
    </body>
</html>

我已经为此包含了所有适当的功能,但是如果您需要查看更多代码,请告诉我...我认为这就是所有适用的功能...

编辑:views.py

from django.shortcuts import render_to_response
from django.contrib.auth import *

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('auth.html',{'state':state, 'username': username})
4

2 回答 2

3

您需要将令牌添加到模板上下文中,尝试类似的操作,并阅读问题评论中链接到的文档/教程。

from django.core.context_processors import csrf

def login_user(request):
    ...your code...
    ctx = {'state':state, 'username': username}
    ctx.update(csrf(request))
    return render_to_response('auth.html',ctx)
于 2013-03-09T01:08:48.513 回答
0

在您看来,将 a 返回context_instance到模板如下

from django.template import RequestContext
def login_user(request):
    ...
    return render_to_response('auth.html',{'state':state, 'username':
     username},context_instance=RequestContext(request))
于 2013-03-09T05:01:43.997 回答