每当我重新加载页面时,点击浏览器的地址栏网址或在另一个标签页中打开相同的网址,该会话似乎已过期。我的意思是我的页面正在导航到登录页面。
这是我的看法。下面的视图将在一个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',
有人可以帮我这个吗
-RAM
答案 0 :(得分:1)
那是因为你使用'authenticate'方法而不是'login'方法。你要做的就是使用'login'而不是'authenticate'来完成。当你使用'login'时,它会节省会话中的用户ID。请参阅此https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.login
答案 1 :(得分:1)
添加对login函数的调用,因为此函数负责在会话中保存用户的ID,如下所示:
else:
user = authenticate(username = username, password = password)
if user is not None:
login(request, user)
else:
...