在此用户登录后,我是否可以检查用户是否第一次登录? - Django

时间:2018-03-20 13:29:53

标签: django python-2.7 login django-authentication

我试图抓住第一次有人登录,所以我可以将他/她重定向到另一个页面然后正常。

我和小组合作。管理员可以创建具有多个用户的组(使用生成的用户名和密码)。所以可能是用户已经在用户登录之前创建了(只有一个用户没有注册表)

这是我想要的代码:

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永远不会为。

有人可以帮我看看用户第一次登录的时间吗?

2 个答案:

答案 0 :(得分:1)

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')

答案 1 :(得分:0)

这对我来说是一个很大的问题,但我找到了一种简单的方法。 当用户尝试登录时,请设置其他变量以保存用户登录数据的值。

检查我的代码:

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%}
相关问题