所以,我想向已记录/未记录的用户显示不同的菜单。
如果用户未登录:(登录,注册)
如果他已登录:(主要,我的个人资料,退出)
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。抱歉我的英文不好
答案 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/)。