0

每当我重新加载页面时,在浏览器的地址栏 URL 中单击 enter 或在另一个选项卡中打开相同的 URL,会话似乎已过期。我的意思是我的页面正在导航到登录页面。

这是我的看法。下面的视图将呈现在一个 HTML 页面中,即 index.html。每当用户登录的用户名/密码登录表单以其他方式显示时,它都会说谢谢您的登录。所以这个功能运行良好。

def index(request):
     if request.user.is_authenticated():
            return HttpResponseRedirect('/myapp/')

     if request.method == 'POST':
            form = UserLoginForm(request.POST)
            if form.is_valid():
                username = form.cleaned_data['username']
                password = form.cleaned_data['password']
            if request.user.is_authenticated():
                return HttpResponseRedirect('/myapp/')
            else:
                user = authenticate(username = username, password = password)
            return shortcuts.render_to_response('index.html',locals(),
                                    context_instance = context.RequestContext(request))
     else:
            form = UserLoginForm

return shortcuts.render_to_response('index.html',locals(),
                                    context_instance = context.RequestContext(request))

供您参考,我在我的应用程序中安装了中间件类。

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',

有人可以帮我吗?

-内存

4

2 回答 2

1

那是因为您使用的是“身份验证”方法而不是“登录”方法。您尝试做的事情将通过使用“登录”而不是“身份验证”来完成。当您使用“登录”时,它将用户的 ID 保存在会话。请参阅此https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.login

于 2012-09-16T10:31:03.393 回答
1

添加对登录函数的调用,因为该函数负责在会话中保存用户的 ID,如下所示:

else:
    user = authenticate(username = username, password = password)
    if user is not None:
        login(request, user)
    else:
        ...
于 2012-09-16T10:31:20.663 回答