Django中的用户认证问题
我刚开始学习Python和Django。我正在尝试使用Django框架实现安全的用户认证。我在[templates/user]目录下创建了一个login.html页面。如果登录成功,用户会被引导到user/ContactSuccess.html页面。
ContactSuccess.html :
<html>
---------{{request.user.username }}------------
{% if request.user.is_authenticated %}
<p>Welcome, {{ user.username}}. Thanks for logging in.</p>
{% else %}
<p>Welcome, new user. Please log in.</p>
{% endif %}
<body>success</body>
</html>
views.py
............
def testlogsuccess(request):<br/>
if not request.user.is_authenticated():
return HttpResponseRedirect("/accounts/login/")
else:
user = request.user.is_authenticated()
return render_to_response('user/ContactSuccess.html',locals())
..............
urls.py:
urlpatterns = patterns('',
(r'^admin/', include(admin.site.urls)),
(r'^accounts/login/$',login),
(r'^accounts/logout/$', logout),
(r'^accounts/profile/$', views.testlogsuccess),
这部分工作得很好。
输出结果是:
---------Ji------------
Welcome, . Thanks for logging in.
success .
但我的问题是,当我停止开发服务器后再重新启动,然后尝试访问这个网址 'http://127.0.0.1:8000/accounts/profile/',而没有登录时,它仍然显示上面的输出。我该如何避免这种情况。
我使用的是Django 1.3,Python 2.7.2和Windows 7。
1 个回答
2
问题在于,决定用户是否已经登录的这些信息是由浏览器来判断的——HTTP认证会把用户名和密码存储起来,然后在每次请求时自动加上这些信息。要让登录失效,你需要告诉浏览器停止使用这些信息。
关于这个话题,有很多相关的信息可以在这里找到。
不过,由于这是一个测试环境,而且每次重启浏览器时,认证信息基本上都会被重置,所以我建议你直接关闭浏览器再重新打开,这样最简单。