检查用户是否在Django 2.0中注册

时间:2018-10-04 00:28:32

标签: python django

当前,管理员(超级用户)正在创建用户,并通过电子邮件将详细信息以及重置密码链接发送给用户。用户将单击“重置密码”链接并在那里更改密码。

现在,管理员必须在重置密码后知道用户是否已登录系统。必须以活动用户(已登录用户)或非活动用户(尚未登录用户)的身份通知管理员。

我是Django的新手,不知道如何确定用户是否已登录。

在Ralf建议之后,这就是我的代码的样子
我已将is_register的默认值设置为False,并且在html中显示为无效。用户登录后,必须将非活动状态更改为活动状态。

models.py

class RegisterUser(models.Model):
    #user = models.OneToOneField(User, on_delete=models.CASCADE)
    email = models.EmailField(blank=True, null=None)
    first_name = models.CharField(max_length=50, default=None)
    last_name = models.CharField(max_length=50, default=None)
    is_active = models.BooleanField(_('active'), default =True)
    is_register = models.NullBooleanField(_('register'), default=False, null=True)
    program = models.CharField(max_length=50, default='Test')

vews.py

@login_required
def users(request):
    re = RegisterUser
    registeredUsers = User.objects.all()
    reg = User.last_login
    if reg is not None:
        re.is_register = False
    else:
        re.is_register = True
    return render(request, 'account/viewUsers.html', {'registeredUsers' : registeredUsers,
                                                      'reg' : reg })

user.html

 {% for RegisteredUser in RegisteredUsers %}
        <tr>
        <td>{{ RegisteredUser.first_name }}</td>
                <td>{{ RegisteredUser.last_name }}</td>
                <td>{{ RegisteredUser.email }}</td>
        {% if RegisteredUser.is_active %}
          <td><button type="button" class="btn btn-lg btn-primary" disabled>Active</button></td>
        {% else %}
          <td><button type="button" class="btn btn-lg btn-primary" disabled>Inactive</button></td>
        {% endif %}
        {% if RegisterUser.is_register %}
           <td><button type="button" class="btn btn-lg btn-primary" disabled>Active</button></td>
        {% else %}
          <td><button type="button" class="btn btn-lg btn-primary" disabled>Inactive</button></td>
        {% endif %}

尽管用户已登录,但我仍然在html页面上看到该注册无效。

1 个答案:

答案 0 :(得分:3)

Django User模型有一个last_loginDateTimeField

您可以使用此字段获取所需的信息。 超级用户通过管理面板创建用户后,字段last_login将为None,直到成功登录为止。

因此,User.objects.filter(last_login__isnull=True)为您提供了所有从未登录过的已创建用户。


在修改问题之后:

  • 首先,您可能应该只使用djangos默认User模型而不是您自己的模型,因为您建议的字段实际上已经存在。
  • reg = User.last_login行是不正确的,因为应该为每个用户实例而不是类对象检查last_login字段。

在您的视图中尝试以下操作:

@login_required
def users(request):
    return render(
        request,
        'account/viewUsers.html',
        {'all_users': User.objects.all()})

这在您的模板中:

{% for u in all_users %}
    <tr>
        <td>{{ u.first_name }}</td>
        <td>{{ u.last_name }}</td>
        <td>{{ u.email }}</td>
        <td>
            <button type="button" class="btn btn-lg btn-primary" disabled>
                {% if u.is_active %}Active{% else %}Inactive{% endif %}
            </button>
        </td>
        <td>
            <button type="button" class="btn btn-lg btn-primary" disabled>
            {% if u.last_login is None %}
                Never logged in
            {% else %}
                Has last logged in on {{ u.last_login }}
            {% endif %}
            </button>
        </td>
    </tr>
{% endfor %}