Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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
Python 3.x Django PostgreSQL-密码为';t保存到数据库中_Python 3.x_Django_Postgresql - Fatal编程技术网

Python 3.x Django PostgreSQL-密码为';t保存到数据库中

Python 3.x Django PostgreSQL-密码为';t保存到数据库中,python-3.x,django,postgresql,Python 3.x,Django,Postgresql,我有一个自定义用户模型和views.py中的一个函数来处理注册。例如,当我向Postman注册一个用户时,所有用户数据都正确地存储在数据库中,但密码字段仍然为空。我认为,当我尝试使用一个简单的登录页面时,这会导致问题——它从不接受我的凭据(因为数据库中没有密码)。你知道为什么不保存密码以及如何修复吗 注册新用户时,我在views.py中有这样一个函数: def register(response): if response.method == 'POST': form

我有一个自定义用户模型和
views.py
中的一个函数来处理注册。例如,当我向Postman注册一个用户时,所有用户数据都正确地存储在数据库中,但密码字段仍然为空。我认为,当我尝试使用一个简单的登录页面时,这会导致问题——它从不接受我的凭据(因为数据库中没有密码)。你知道为什么不保存密码以及如何修复吗

注册新用户时,我在
views.py
中有这样一个函数:

def register(response):

    if response.method == 'POST':

        form = RegisterForm(response.POST)

        if form.is_valid():

            user = form.save()

            user.refresh_from_db()

            user.id = form.cleaned_data.get('id')

            user.save()

            username = form.cleaned_data.get('email')

            password = form.cleaned_data.get('password')

            user = authenticate(username=email, password=password)    
    
            return HttpResponse(status=201)



        else:

            form = RegisterForm()

    
    return HttpResponse(status=400)
这是我的自定义用户模型:

class UserManager(BaseUserManager):

    def create_user(self, email, password):

        """

        Creates and saves a User with the given email and password.

        """

        if not email:

            raise ValueError('A user must have a email.')



        user = self.model(

            email=self.normalize_email(email),

        )



        user.set_password(password)

        user.save(using=self._db)

        return user
编辑。这是我的
注册表执行

User = get_user_model()

class RegisterForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)
    password_2 = forms.CharField(label='Confirm Password', widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ['email', 'id', 'gender', 'height', 'weight']

    def clean_email(self):
        '''
        Verify email is available.
        '''
        email = self.cleaned_data.get('email')
        qs = User.objects.filter(email=email)
        if qs.exists():
            raise forms.ValidationError("email is taken")
        return email 
    
    def clean_id(self):
        '''
        Verify id is available.
        '''
        id = self.cleaned_data.get('id')
        qs = User.objects.filter(id=id)
        if qs.exists():
            raise forms.ValidationError("id is taken")
        return id

    def clean(self):
        '''
        Verify both passwords match.
        '''
        cleaned_data = super().clean()
        password = cleaned_data.get("password")
        password_2 = cleaned_data.get("password_2")
        if password is not None and password != password_2:
            self.add_error("password_2", "Your passwords must match")
        return cleaned_data
以下是模型:

class CustomUser(AbstractBaseUser):

    is_active = models.BooleanField(default=True)

    staff = models.BooleanField(default=False) # a admin user; non super-user

    admin = models.BooleanField(default=False) # a superuser

    gender = models.CharField(null=True, blank=True, max_length=20)

    height = models.CharField(null=True, blank=True, max_length=3)

    id = models.CharField(primary_key=True, unique=True, blank=False, max_length=100)

    email= models.EmailField(max_length=100, unique=True, null=False, blank=False)

    weight = models.CharField(max_length=3, null=True, blank=True)    


    USERNAME_FIELD = 'email'

    REQUIRED_FIELDS = [] # Email & Password are required by default.



    def get_full_name(self):

        # The user is identified by their email address

        return self.email



    def get_short_name(self):

        # The user is identified by their email address

        return self.email



    def __str__(self):

        return self.email



    def has_perm(self, perm, obj=None):

        "Does the user have a specific permission?"

        # Simplest possible answer: Yes, always

        return True



    def has_module_perms(self, app_label):

        "Does the user have permissions to view the app `app_label`?"

        # Simplest possible answer: Yes, always

        return True



    @property

    def is_staff(self):

        "Is the user a member of staff?"

        return self.staff



    @property

    def is_admin(self):

        "Is the user a admin member?"

        return self.admin



    objects = UserManager()

编辑完我的问题后不久,我注意到我缺少了
RegisterForm
类中的save函数。添加此选项解决了问题:

def save(self, commit=True):
        user = super().save(commit=False)
        user.set_password(self.cleaned_data["password"])
        if commit:
            user.save()
        return user

共享您的用户模型。
RegisterForm
看起来像什么?@WillemVanOnsem我将模型编辑成我的问题。@markwalker\uu我将
RegisterForm
编辑成我的问题。