登录后Django重定向

时间:2014-09-21 17:16:36

标签: python django

我在Django中创建了我的第一个应用程序 我决定在每个视图上都想要​​记录窗口(小一个用户名/密码na“登录”按钮)。 来自base.html:

<div id="logging">
    {% if user.is_authenticated %}
    <h1>Witaj, {{user.username}}!</h1>
    {% else %}
     <form method="post" action="{% url 'harcowanie.views.login' %}">
    {% csrf_token %}
    <div  style="display: inline-block;">
    <p><label for="id_username">Username:</label> <input id="id_username" type="text" name="username" maxlength="30" /></p>
    <p><label for="id_password">Password:</label> <input type="password" name="password" id="id_password" /></p>
    </div>
    <div style="display: inline-block; position: relative; bottom: 25px;">
    <input class="decent_background" type="submit" value="Log in" />
    </div>
</form>
{% endif %}
    </div>

我的views.py:

的任何部分
def login(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request=request, user=user)
            return redirect(request.META['HTTP_REFERER'],   context_instance=RequestContext(request))
        else:
            pass
            # Return a 'disabled account' error message
    else:
        pass
        # Return an 'invalid login' error message.

    return redirect(request.META['HTTP_REFERER'],   context_instance=RequestContext(request))

但我收到错误:

  

模板中使用了{%csrf_token%},但上下文没有使用   提供价值。这通常是由于不使用而引起的   的RequestContext。 warnings.warn(“A {%csrf_token%}”用于a   模板,但上下文没有提供价值。这通常是   不使用RequestContext引起的。“)

2 个答案:

答案 0 :(得分:2)

您似乎以错误的方式使用redirect。此方法不支持参数context_instance。见docs

关于错误。确保查看来自request.META ['HTTP_REFERER']的呈现页面使用RequestContext或手动导入并使用处理器生成CSRF令牌(docs)。

答案 1 :(得分:0)

该错误表明CSRF令牌不在您的上下文中。很好地了解CSRF的内容:here

要生成CSRF令牌,请在设置中启用中间件,或在视图中手动生成,然后将其传递给模板。我强烈建议您启用中间件:)