创建无法登录的django用户

时间:2021-02-21 09:43:19

标签: python django django-users

我想创建一个用作 ForeignKey 的用户,但我不希望这些用户可以登录系统。我不知道如何继续。 (关于设置 set_unusable_password() 或 None 以及如何执行它):

我的accounts.py文件如下

class User(AbstractBaseUser):
    GENDER = (("MALE", "Male"), ("FEMALE", "Female"))
    
    user_type = models.CharField(max_length=50, choices=Types.choices, default=Types.PATIENT)
    full_name = models.CharField(max_length=255, blank=True, null=True)
    phone = models.CharField(max_length=255, unique=True)
    email = models.CharField(max_length=255, blank=True, null=True, unique=True)
    active = models.BooleanField(default=False)
    gender = models.CharField(max_length=15, choices=GENDER)
    admin = models.BooleanField(default=False)
    staff = models.BooleanField(default=False)
    timestamp = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    USERNAME_FIELD = "phone"  # username
    REQUIRED_FIELDS = []
    objects = UserManager()

先谢谢各位。 <3

2 个答案:

答案 0 :(得分:2)

您可以使用用户记录的 is_active 字段

<块引用>

is_active 布尔值。指定此用户帐户是否应 认为是活跃的。我们建议您将此标志设置为 False 而不是删除帐户;这样,如果您的应用程序有任何 外键给用户,外键不会坏。

答案 1 :(得分:1)

在视图中,您还应该检查用户是否处于活动状态。 例如:

def user_login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        user = authenticate(username = username,password = password)
        if user is not None and user.active:
            login(request,user)

由于您已经覆盖了您的用户模型并从 is_active 更改了活动字段。如果活动字段为 False 那么它将不允许用户登录,如果用户处于活动状态,它将允许用户登录。