我可以在该用户登录后检查该用户是否第一次登录吗?- 姜戈

Iri*_*Mxx 2 django login django-authentication python-2.7

我正在尝试捕捉某人第一次登录的信息,以便我可以将他/她重定向到另一个页面,然后正常进行。

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

这是我想要的代码:

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')
Run Code Online (Sandbox Code Playgroud)

我已经阅读了有关检查 user.last_login 的内容,但是对于这种情况,它不起作用,因为它在用户登录后检查此方法。这意味着 user.last_login 永远不会是 None。

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

Wil*_*ing 5

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)
Run Code Online (Sandbox Code Playgroud)

然后在您看来,您只需要检查会话的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')
Run Code Online (Sandbox Code Playgroud)