Django set_password(password) не хэширует пароль

В документации Django говорится, что он хэширует пароль, но не сохраняет его, поэтому я должен сохранить его, что я и сделал. Если я создаю суперпользователя, то все в порядке, но когда я пытаюсь создать учетную запись пользователя, пароль сохраняется в базе данных в нехешированном виде. Я пытаюсь использовать make_password, но это тоже не работает, я получаю тот же результат. У вас есть какие-нибудь идеи?

models.py

            from django.contrib.auth.hashers import make_password
            from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
            from datetime import datetime
            
            from django.core.validators import MinLengthValidator
            
            from .CHOICES import *
            from django.utils.translation import gettext_lazy as _
            from django.db import models
            
            # Create your models here.
            country_choice = COUNTRY_CHOICE
            
            
            class CustomAccountManager(BaseUserManager):
           

Вот пользовательская модель пользователя.

                def create_superuser(self, email, username, first_name, password, **other_fields):
            
                    other_fields.setdefault('is_staff', True)
                    other_fields.setdefault('is_superuser', True)
                    other_fields.setdefault('is_active', True)
            
                    if other_fields.get('is_staff') is not True:
                        raise ValueError('Superuser must be assigned to is_staff=True.')
            
                    if other_fields.get('is_superuser') is not True:
                        raise ValueError('Superuser must be assigned to is_superuser=True.')
            
                    return self.create_user(email, username, first_name, password, **other_fields)

Вот модель пользователя.

                def create_user(self, email, username, first_name, password, **other_fields):
            
                    if not email:
                        raise ValueError(_('You must provide an email address'))
            
                    email = self.normalize_email(email)
                    user = self.model(email=email, username=username,
                                      first_name=first_name, **other_fields)
            
                    user.set_password(password)
                    # user.make_password(self.request.data[password])

Здесь я сохраняю объект пользователя.

                    user.save()
                    return user
            
            
            class NewUser(AbstractBaseUser, PermissionsMixin):
                email = models.EmailField(_('email address'), unique=True)
                username = models.CharField(max_length=50, validators=[MinLengthValidator(8)], unique=True)
            
                first_name = models.CharField(max_length=30, validators=[MinLengthValidator(3)], blank=False)
                middle_name = models.CharField(max_length=30, blank=True)
                last_name = models.CharField(max_length=30, validators=[MinLengthValidator(3)], blank=False)
            
                # date_of_birth = models.DateField(blank=True)
                # month = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(12)], blank=False)
                # year = models.IntegerField(validators=[MinValueValidator(1942), MaxValueValidator(2017)], blank=False)
            
                # gender model
                GENDER_CHOICES = (
                    ('M', 'Male'),
                    ('F', 'Female'),
                    ('O', 'Other'),
                )
            
                gender = models.CharField(max_length=1, choices=[('M', 'Male'), ('F', 'Female'), ('O', 'Other')], blank=False)
                country = models.CharField(max_length=2, choices=COUNTRY_CHOICE, blank=False)
            
                datetime = models.DateTimeField(default=datetime.now())
            
                objects = CustomAccountManager()
            
                is_staff = models.BooleanField(default=False)
                is_active = models.BooleanField(default=False)
            
                USERNAME_FIELD = 'username'
                REQUIRED_FIELDS = ['email', 'first_name']
            
                def __str__(self):
                    return self.username

Тогда у меня есть forms.py

          from django.forms import ModelForm, TextInput, EmailInput, PasswordInput
          from .models import NewUser


          class Person(ModelForm):


              class Meta:

                  model = NewUser

                  fields = ["username", "email", "first_name", "middle_name", "last_name",
                            "gender", "country", "password"]

And views.py

            def register(request):
                if request.user.is_authenticated:
                    return redirect('profiles')
                else:
                    if request.method == 'POST':
                        form_one = Person(request.POST)
                        Person()
            
                        if form_one.is_valid():
                            form_one.save()
            
                            username = form_one.cleaned_data.get("username")
            
                            messages.success(request, f"Account created for {username}!")
                            return redirect("login_user")
            
                    else:
                        form_one = Person()
            
                    return render(request, "accounts/register.html", {"form_one": form_one})

Я не понимаю, что не так. Извините за то, что могу вас расстроить, я новичок в Django, и не могу сказать, что я эксперт по python, но я стараюсь изо всех сил. Заранее большое спасибо! Ссылка на Github на весь проект https://github.com/RazzTazz28/Django-Atlas.

вам необходимо сохранить пользователя после set_password. Set password создает только хэшированное парольное слово, вы должны сохранить его

Вернуться на верх