Django中的用户认证问题

0 投票
1 回答
904 浏览
提问于 2025-04-17 01:13

我刚开始学习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认证会把用户名和密码存储起来,然后在每次请求时自动加上这些信息。要让登录失效,你需要告诉浏览器停止使用这些信息。

关于这个话题,有很多相关的信息可以在这里找到。

不过,由于这是一个测试环境,而且每次重启浏览器时,认证信息基本上都会被重置,所以我建议你直接关闭浏览器再重新打开,这样最简单。

撰写回答