所以我的网站基本上有两种登录方式,其中一种是针对普通用户,一种是定期屏幕,要求用户输入用户名和密码,另一种方式是针对员工。
登录后,员工登录应将其重定向到管理站点,但由于某种原因,重定向不会发生,它会保留在同一个登录页面上。
我在登录视图中使用此条件。
if user is not None and user.is_active and user.is_staff:
auth.login(request,user)
return HttpResponseRedirect("/admin/")
管理站点在我的网址配置中运行并运行一切,但我不知道这是否是正确的方式重定向到会话中的管理站点。
谢谢,任何帮助都将不胜感激。
答案 0 :(得分:1)
当用户登录时,login()会自动重定向用户在代码中跳过以下行:
return HttpResponseRedirect("/admin/")
两种可能性:
如果您的REQUEST字段中存在REDIRECT_FIELD_NAME(又名“next”),则会立即将用户重定向到该地址。
如果找不到REDIRECT_FIELD_NAME,则会将用户重定向到您在settings.py&中定义的LOGIN_REDIRECT_URL。如果没有,则重定向到LOGIN_REDIRECT_URL的默认值。
因此,您的代码似乎没有设置REDIRECT_FIELD_NAME,因此无论如何,所有用户自然会被重定向到LOGIN_REDIRECT_URL的路径。
要解决此问题,请在知道用户是员工时设置request.REQUEST ['next'] ='/ admin /'。 然后重定向将自动发生。
答案 1 :(得分:1)
登录用户并根据用户状态重定向的一种方法可能是:
from django.shortcuts import redirect
from django.contrib.auth import authenticate, login
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user.is_active:
# Redirecting to the required login according to user status.
if user.is_superuser or user.is_staff:
login(request, user)
return redirect('/admin/') # or your url name
else:
login(request, user)
return redirect('/')