`context_instance=RequestContext(request)`在Django中使用 cookies 吗
当我更改主页的视图时:
def home(request):
return render_to_response('homepage.html')
变成
def home(request):
return render_to_response('homepage.html',context_instance=RequestContext(request))
登录我网站的用户即使在关闭网页浏览器(火狐)后也会一直保持登录状态。
为什么 context_instance=RequestContext(request)
可以做到这一点?它是使用 cookies 吗?
这种状态会保持多久呢?
谢谢。
主页的内容是:
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
<p>Welcome, new user. Please <a href="/account/login_view">login</a></p>
{% endif %}
2 个回答
0
如果你在代码中添加了 context_instance=RequestContext(request)
,那么你在 settings.py
文件中定义的上下文处理器会被加入到模板中。在你的情况下,这会包含当前用户的信息,也就是 user
这个变量。
如果你把它去掉了,那么这个变量就不存在了。不过在模板里,这并不会报错,而是会显示未登录用户的HTML内容!
用户的信息是存储在一个 会话 中,而会话是通过 cookies 来实现的。
3
添加RequestContext并不会改变用户的登录状态。至于你问的关于cookies的问题,其实没有什么意义。RequestContext的作用是让某些变量在模板中可以使用,其中包括一个叫user
的变量,前提是你已经启用了auth
这个上下文处理器。
即使没有RequestContext,用户仍然是登录状态,但因为你没有把user
这个变量传递到上下文中,所以你的if
语句会判断为假。这和用户的实际状态没有任何关系。