Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
如何在ModelBackEnd中检查Django中的非活动用户_Django_Django Models - Fatal编程技术网

如何在ModelBackEnd中检查Django中的非活动用户

如何在ModelBackEnd中检查Django中的非活动用户,django,django-models,Django,Django Models,我如何检查ModelBackEnd中的非活动自定义用户而不返回None(如AllowlUsersModelBackend所做的)?以下是我目前掌握的情况: from django.contrib.auth import backends, get_user_model from django.db.models import Q UserModel = get_user_model() class ModelBackend(backends.ModelBackend): def au

我如何检查ModelBackEnd中的非活动自定义用户而不返回None(如AllowlUsersModelBackend所做的)?以下是我目前掌握的情况:

from django.contrib.auth import backends, get_user_model
from django.db.models import Q
UserModel = get_user_model()


class ModelBackend(backends.ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        if username is None:
            username = kwargs.get(UserModel.USERNAME_FIELD)
        try:
            # user = UserModel._default_manager.get_by_natural_key(username)
            # You can customise what the given username is checked against, here I compare to both username and email fields of the User model
            user = UserModel.objects.get(Q(username__iexact=username) | Q(email__iexact=username))
            #print("what is going on")
        except UserModel.DoesNotExist:
            # Run the default password hasher once to reduce the timing
            # difference between an existing and a nonexistent user (#20760).
            UserModel().set_password(password)
        else:
            if user.check_password(password) and self.user_can_authenticate(user):
                return user
        return super().authenticate(request, username, password, **kwargs)

获取用户实例时,将条件添加到查询中

user = UserModel.objects.exclude(is_active=False).get(Q(username__iexact=username) | Q(email__iexact=username))

你想干什么?允许非活动用户登录?我只需要在登录期间检测is_active=False的帐户。用于什么目的?我只想阻止禁用的帐户重新登录。我通过在try语句中返回用户就知道了。