django - 是否可以在该用户登录后查看该用户是否为首次登录? - Django

标签 django python-2.7 authentication 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 永远不会是 None。

谁能帮我看看用户第一次登录的时间?

最佳答案

last_login 值是通过在登录时发生的信号设置的,但在您的代码执行之前,因此您永远不会像您发现的那样看到 None

实现您想要的一种方法是注册您自己的信号接收器以在某处设置 first_login 属性,例如在用户 session 中,在更新 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)

然后在您看来,您只需要检查 session 中的 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')

关于django - 是否可以在该用户登录后查看该用户是否为首次登录? - Django ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49385582/

相关文章:

python - Django 是否支持在许多非抽象模型之后继承的模型类?

Python 使用 BOM 编写 UCS-2 Little Endian (utf-16-le) 文件

python - 使用 scipy 进行二维插值/平滑线时如何提高性能?

java - 对耳内的多个 Web 应用程序使用一种身份验证

.net - SQLMembershipProvider - 将成员资格添加到现有数据库。设置权限

django - 如何在 Django 中使用多个用户模型?

python - 使用不同版本的Python开发

身份验证组合 OpenID 和 Facebook

django - 如何在由 "sites"框架提供支持的多个 Django 站点中获得唯一用户?

python - 'ascii' 编解码器无法解码字节 0xef 的位置