Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 我是否可以检查该用户登录后是否首次登录?-德扬戈_Django_Python 2.7_Login_Django Authentication - Fatal编程技术网

Django 我是否可以检查该用户登录后是否首次登录?-德扬戈

Django 我是否可以检查该用户登录后是否首次登录?-德扬戈,django,python-2.7,login,django-authentication,Django,Python 2.7,Login,Django Authentication,我正试图捕捉第一次有人登录,这样我就可以将他/她重定向到另一个页面 我和小组一起工作。管理员可以创建一个包含多个用户的组(使用生成的用户名和密码)。因此,在用户登录之前,可能已经创建了一个用户(只有一个用户没有注册表单) 这是我想要的代码: def index(request): if request.user: user = request.user if user.last_login is None: return redir

我正试图捕捉第一次有人登录,这样我就可以将他/她重定向到另一个页面

我和小组一起工作。管理员可以创建一个包含多个用户的组(使用生成的用户名和密码)。因此,在用户登录之前,可能已经创建了一个用户(只有一个用户没有注册表单)

这是我想要的代码:

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_登录的内容,但是对于这种情况,它不起作用,因为它会在用户登录后检查此方法。这意味着user.last_登录永远不会为None


有人能帮我看一下用户何时首次登录吗

上次登录的
last\u login
值是通过一个信号设置的,该信号发生在登录时,但在代码执行之前,因此您永远不会看到您发现的
None

实现所需功能的一种方法是,在更新
上次登录
值之前,注册自己的信号接收器,在某个地方设置
首次登录
属性,例如在用户会话中

从django.contrib.auth.signals导入已登录的用户
从django.contrib.auth.models导入更新\上次登录
def update_first_登录(发件人、用户,**kwargs):
如果user.last_login为无:
#此用户首次登录时
kwargs['request'].会话['first_login']=True
#将上次登录值更新为正常值
更新上次登录(发件人、用户,**kwargs)
用户已登录。断开连接(更新上次登录)
用户已登录。连接(首先更新登录)
然后在您的视图中,您只需要检查会话的
first\u login
属性

def索引(请求):
如果请求。用户:
if request.session.get('first_login'):
返回重定向('配置文件')
其他:
返回重定向('home')
其他:
返回重定向(“/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%}
如果user.last\u登录为无:
身份验证登录(请求、用户)
返回重定向(alertPassword)
#当用户第一次登录时,它将传递一个值
其他:
身份验证登录(请求、用户)
返回重定向(moveToLogin)
def moveToLogin(请求):
返回呈现(请求“home.html”)
def警报密码(请求):
第一次登录=真
返回呈现(请求“home.html”,{“first_login”:first_login})
#它将向名为first login is True的模板传递一个值
#然后转到您的模板并添加此
{%if first_login==True%}
#把你想做的任何事情都放进去
#在我的例子中,我想使用脚本打开一个新窗口
窗口打开(“弹出窗口”)
{%endif%}

rainings,您可以创建一个模型,其中用户为外来用户,并创建一个名为“First_login”的boloean字段,当您首次创建用户时,该字段也会在该模型上创建一条记录,该字段处于false状态,以便您可以进行检查,然后在第一次登录时,将其更改为True。有人可能会说这不现实,但我想这是一个透视问题。使用request.session.pop('first_login key',None)将阻止用户在每次登录时重定向(或使用:del request.session['first_login']删除密钥)。这对我来说不起作用,即使在触发信号接收器并执行update_first_login之前,django框架接收器将更新最后一次登录。上面的代码有时会工作,但不可靠,因为django框架中的原始接收器可能会执行并更新最后一次登录。因此,当update_first_login函数执行时,它不会将first_login设置为True,因为它已经在数据库中设置了。另一种方法是在用户模型或相关模型中添加一个字段,该字段在计数器或布尔变量中跟踪登录。另一个问题建议使用条件profile.user.last\u login==profile.user.date\u joined,这同样不可靠,因为如果用户在同一天多次登录和注销。