Django:我可以使用 CreateView 创建一个用户对象,其中用户只是 Django 的内置用户模型吗?
Django : Can I use CreateView to create a User object where User is just Django's built in User model?
我正在尝试创建一个简单的用户登录系统,用户可以在一个页面上注册,然后使用这些凭据在另一个页面上登录网站。这是我的注册和登录视图:
class SignupView(CreateView):
model = User
form_class = SignupForm
template_name = 'journal_app/signup.html'
success_url = reverse_lazy('home')
class LoginUserView(LoginView):
template_name = 'journal_app/login.html'
如您所见,我正在使用 CreateView 创建用户对象。用户注册后,我可以在管理控制台的用户组中看到记录已成功更新。问题是当我尝试登录时,它总是抛出 username/password 不匹配错误。任何想法可能是什么原因?我是 Django 的初学者,所以它可能非常简单。
注册表单-
class SignupForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'username', 'password']
widgets = {
'password': forms.PasswordInput()
}
问题是您需要 散列 密码。姜戈 stores a hash of the password [Django-doc]. If you make a custom user model, you should normally implement a UserManager
[Django-doc] as well. This takes a password, and will hash it, for examply by calling a method .set_password(…)
[Django-doc]。然后,此方法将 散列 密码。
因此您可以重写表单以保存用户:
class SignupForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'username', 'password']
widgets = {
'password': forms.PasswordInput()
}
def save(self, commit=True):
user = super().save(commit=False)
user.<b>set_password(</b>self.cleaned_data['password']<b>)</b>
if commit:
user.save()
return user
我正在尝试创建一个简单的用户登录系统,用户可以在一个页面上注册,然后使用这些凭据在另一个页面上登录网站。这是我的注册和登录视图:
class SignupView(CreateView):
model = User
form_class = SignupForm
template_name = 'journal_app/signup.html'
success_url = reverse_lazy('home')
class LoginUserView(LoginView):
template_name = 'journal_app/login.html'
如您所见,我正在使用 CreateView 创建用户对象。用户注册后,我可以在管理控制台的用户组中看到记录已成功更新。问题是当我尝试登录时,它总是抛出 username/password 不匹配错误。任何想法可能是什么原因?我是 Django 的初学者,所以它可能非常简单。
注册表单-
class SignupForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'username', 'password']
widgets = {
'password': forms.PasswordInput()
}
问题是您需要 散列 密码。姜戈 stores a hash of the password [Django-doc]. If you make a custom user model, you should normally implement a UserManager
[Django-doc] as well. This takes a password, and will hash it, for examply by calling a method .set_password(…)
[Django-doc]。然后,此方法将 散列 密码。
因此您可以重写表单以保存用户:
class SignupForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'username', 'password']
widgets = {
'password': forms.PasswordInput()
}
def save(self, commit=True):
user = super().save(commit=False)
user.<b>set_password(</b>self.cleaned_data['password']<b>)</b>
if commit:
user.save()
return user