是否可以在该用户登录后查看该用户是否为首次登录? - 姜戈
Can I check if a user is logged in for the first time after this user is logged in? - Django
我正在尝试捕捉第一次有人登录的时间,这样我就可以 him/her 正常重定向到另一个页面。
我正在与小组合作。管理员可以创建一个包含多个用户的组(使用生成的用户名和密码)。所以可能是在用户登录之前已经创建了一个用户(没有只有一个用户的注册表)
这是我想要的代码:
def index(request):
if request.user:
user = request.user
if user.last_login is None:
return redirect('profile')
else:
return redirect('home')
else:
return redirect('/login')
我读过有关检查 user.last_login 的内容,但对于这种情况不起作用,因为它会在用户登录后检查此方法。这意味着 user.last_login 永远不会 None.
谁能帮我看看用户第一次登录的时间?
last_login
值是通过登录时发生的信号设置的,但在您的代码执行之前,因此您永远不会看到 None
正如您发现的那样。
实现您想要的效果的一种方法是注册您自己的信号接收器以在某处设置 first_login
属性,例如在用户会话中,在更新 last_login
值之前。
from django.contrib.auth.signals import user_logged_in
from django.contrib.auth.models import update_last_login
def update_first_login(sender, user, **kwargs):
if user.last_login is None:
# First time this user has logged in
kwargs['request'].session['first_login'] = True
# Update the last_login value as normal
update_last_login(sender, user, **kwargs)
user_logged_in.disconnect(update_last_login)
user_logged_in.connect(update_first_login)
然后在您看来,您只需要检查 first_login
属性的会话。
def index(request):
if request.user:
if request.session.get('first_login'):
return redirect('profile')
else:
return redirect('home')
else:
return redirect('/login')
这对我来说是个大问题,但我找到了一个简单的方法。
当用户尝试登录时,创建一个不同的变量来保存用户登录数据的值。
检查我的代码:
if user.last_login is None:
auth.login(request,user)
return redirect(alertPassword)
# when user is login for the first time it will pass a value
else:
auth.login(request,user)
return redirect(moveToLogin)
def moveToLogin(request):
return render(request,"home.html")
def alertPassword(request):
first_login=True
return render(request,"home.html",{"first_login":first_login})
#it will pass a value to the template called first login is True
#then go to your template and add this
{% if first_login==True%}
#put any thing you want to be done
#in my case i wanted to open a new window by using script
<script>
window.open("popUpWindow")
</script>
{%endif%}
我正在尝试捕捉第一次有人登录的时间,这样我就可以 him/her 正常重定向到另一个页面。
我正在与小组合作。管理员可以创建一个包含多个用户的组(使用生成的用户名和密码)。所以可能是在用户登录之前已经创建了一个用户(没有只有一个用户的注册表)
这是我想要的代码:
def index(request):
if request.user:
user = request.user
if user.last_login is None:
return redirect('profile')
else:
return redirect('home')
else:
return redirect('/login')
我读过有关检查 user.last_login 的内容,但对于这种情况不起作用,因为它会在用户登录后检查此方法。这意味着 user.last_login 永远不会 None.
谁能帮我看看用户第一次登录的时间?
last_login
值是通过登录时发生的信号设置的,但在您的代码执行之前,因此您永远不会看到 None
正如您发现的那样。
实现您想要的效果的一种方法是注册您自己的信号接收器以在某处设置 first_login
属性,例如在用户会话中,在更新 last_login
值之前。
from django.contrib.auth.signals import user_logged_in
from django.contrib.auth.models import update_last_login
def update_first_login(sender, user, **kwargs):
if user.last_login is None:
# First time this user has logged in
kwargs['request'].session['first_login'] = True
# Update the last_login value as normal
update_last_login(sender, user, **kwargs)
user_logged_in.disconnect(update_last_login)
user_logged_in.connect(update_first_login)
然后在您看来,您只需要检查 first_login
属性的会话。
def index(request):
if request.user:
if request.session.get('first_login'):
return redirect('profile')
else:
return redirect('home')
else:
return redirect('/login')
这对我来说是个大问题,但我找到了一个简单的方法。 当用户尝试登录时,创建一个不同的变量来保存用户登录数据的值。
检查我的代码:
if user.last_login is None:
auth.login(request,user)
return redirect(alertPassword)
# when user is login for the first time it will pass a value
else:
auth.login(request,user)
return redirect(moveToLogin)
def moveToLogin(request):
return render(request,"home.html")
def alertPassword(request):
first_login=True
return render(request,"home.html",{"first_login":first_login})
#it will pass a value to the template called first login is True
#then go to your template and add this
{% if first_login==True%}
#put any thing you want to be done
#in my case i wanted to open a new window by using script
<script>
window.open("popUpWindow")
</script>
{%endif%}