Django,记住用户已登录

时间:2014-12-05 08:41:50

标签: python django login

所以,我想向已记录/未记录的用户显示不同的菜单。

如果用户未登录:(登录,注册)

如果他已登录:(主要,我的个人资料,退出)

views.py:

@csrf_protect
def loginn(request):
c = {}
c.update(csrf(request))
return render_to_response("login/login.html",c)


@csrf_protect
def auth_view(request):
    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)
            return render_to_response('login/loggedin.html',RequestContext(request))
    else:
        return HttpResponseRedirect('/posts/invalid')

和模板:

{% block Menu %}
{% if not request.user.is_authenticated %}
  <li>  <a href="/posts/login">Login</a> </li>
  <li>  <a href="/posts/register/">Register</a></li>
{% endif %}

{% if request.user.is_authenticated %}
        <li><a href="/posts">Main</a></li>
        <li><a href="#">My profile</a></li>
        <li><a href="/posts/logout">logout</a></li>
    {% endif %}
{% endblock %}

在我的LogIn页面中,我点击提交,在下一页上它完美无缺。登录用户有“菜单”选项。 但是,无论我做什么(刷新页面,转到主页等),我都会看到未登录用户的菜单选项。

我已经阅读了用于用户身份验证的django文档,现在我知道了 模板中的{% if user.is_authenticated %}仅适用于RequestContext,如果我做对了,就没办法以我想要的方式做到这一点。

我希望Django能够记住用户是否一直都在登录,无论我正在做什么(刷新页面,点击链接等)有没有办法在Django中执行此操作?

那么我怎么能记得用户已登录并在模板中使用它?

也许有另一种方法可以记住用户已登录并在模板中使用它?有会话,厨师等的东西吗?

P.S。抱歉我的英文不好

1 个答案:

答案 0 :(得分:2)

第一点:为了确保您的上下文处理器正常工作,您必须在所有视图中使用RequestContext。最简单的方法是使用render()快捷方式(https://docs.djangoproject.com/en/1.6/topics/http/shortcuts/#render)而不是render_to_response()

第二点:HTTP是一种无状态协议,因此,为了让您的应用记住请求之间的任何内容,您需要会话支持。根据您的描述,我强烈怀疑您忘记启用SessionMiddleware(参见https://docs.djangoproject.com/en/1.6/topics/auth/)。