gpt4 book ai didi

python - 扩展 UserCreationForm : password not saved

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:04 25 4
gpt4 key购买 nike

我已经成功创建并扩展了 UserCreationForm 以获取 emailfirst_namelast_name。它可以很好地插入所有值。但我认为 password 字段没有被保存。我使用内置的 auth 对象来验证用户登录到我的网站。当用户在网站上注册并尝试登录时,password 不匹配,用户无法登录。当我从 admin 更改 password 时,我可以成功登录。那么,有人可以帮助我吗?这就是我扩展 UserCreationForm 的方式:

from django import forms
from django.contrib.auth.forms import User
from django.contrib.auth.forms import UserCreationForm


class RegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
first_name = forms.TextInput()
last_name = forms.TextInput()

class Meta:
model = User
fields = ("username", "first_name", "last_name", "email", "password1", "password2")

def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']

if commit:
user.save()

return user

How I change my password usgin admin? 现在,我单击 表单 链接并更改密码。

最佳答案

问题

def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
^
|___ super of UserCreationForm is ModelForm!

您的代码正在调用 UserCreationForm 的父类(super class),而不是您自己的表单 RegistrationForm 的父类(super class)。 (UserCreationForm 的 super 是ModelForm 不知道如何处理用户注册,如密码保存)

结果是 user.set_password() 没有在任何地方被调用

但是,我认为不需要再次调用 user.set_password,因为您的 super 已经调用了。

UserCreationForm.save() 定义如下:

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

Source code on github

解决方案

你应该有这样的东西

def save(self, commit=True):
# Call save of the super of your own class,
# which is UserCreationForm.save() which calls user.set_password()
user = super(RegistrationForm, self).save(commit=False)

# Add the things your super doesn't do for you
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']

if commit:
user.save()

return user

关于python - 扩展 UserCreationForm : password not saved,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34849328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com