`context_instance=RequestContext(request)`在Django中使用 cookies 吗

1 投票
2 回答
1114 浏览
提问于 2025-04-16 08:24

当我更改主页的视图时:

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语句会判断为假。这和用户的实际状态没有任何关系。

撰写回答