Django только аутентифицирует суперпользователя - PullRequest
0 голосов
/ 03 апреля 2020

Я новичок в Django. У меня проблема с authenticate (). Это только аутентифицирует суперпользователя. Для любого другого пользователя возвращается None. Я использую поле «user_id» вместо поля «username». Я не хочу использовать Django формы.

это мои models.py.

models.py

class UserProfileManager(BaseUserManager):

    def create_user(self, user_id, first_name, last_name, user_class, password = None):

        user = self.model(first_name = first_name, last_name = last_name , user_id = user_id, user_class = user_class)
        user.set_password(password)
        user.save(using = self._db)

        return user

    def create_superuser(self, user_id, first_name, last_name , password = None):

        user = self.create_user(user_id, first_name, last_name, None, password = password)
        user.is_superuser = True
        user.is_staff = True
        user.save(using = self._db)
        return user

class UserProfile(AbstractBaseUser, PermissionsMixin):
    first_name = models.CharField(max_length = 255)
    last_name = models.CharField(max_length = 255)
    user_id = models.IntegerField(unique = True, null = True)
    user_class = models.ForeignKey(Class, on_delete = models.PROTECT, default = None, unique = False, null = True)
    is_active = models.BooleanField(default = True)
    is_staff = models.BooleanField( default = False)

    objects = UserProfileManager()

    USERNAME_FIELD = 'user_id'
    # REQUIRED_FIELDS = ['first_name', 'last_name']

    def get_short_name(self):
        return self.first_name

    def get_full_name(self):
        return '{} {}'.format(self.first_name, self.last_name)

    def __str__(self):
        return '{} {}'.format(self.first_name, self.last_name)

это мои взгляды.py.

views.py

class HomeView(TemplateView):
    template_name = 'user_profile/home.html'

    def post(self, request, *args, **kwargs):
        if request.method == 'POST':
            user_id = request.POST.get('user_id')
            password = request.POST.get('password')
            print('id :', user_id, '\npassword : ',password)
            user = authenticate(user_id = user_id , password = password)
            print(user)
            if user is not None :
                if user.is_active:
                    login(request,user)
                    return redirect('user_profile:home')
                else:
                    return render(request, 'user_profile/not_active.html')
            else:
                return render(request, 'user_profile/not_valid.html')

        else:

            return render(request, 'user_profile/home.html')
...