Python Django:我可以使用CreateView创建一个用户对象,其中用户就是Django';s内置用户模型?
我正在尝试创建一个简单的用户登录系统,用户可以在一个页面上注册,然后使用这些凭据登录到另一个页面上的网站。以下是我的注册和登录视图:Python Django:我可以使用CreateView创建一个用户对象,其中用户就是Django';s内置用户模型?,python,django,django-views,web-development-server,Python,Django,Django Views,Web Development Server,我正在尝试创建一个简单的用户登录系统,用户可以在一个页面上注册,然后使用这些凭据登录到另一个页面上的网站。以下是我的注册和登录视图: class SignupView(CreateView): model = User form_class = SignupForm template_name = 'journal_app/signup.html' success_url = reverse_lazy('home') class LoginUserView(Lo
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创建用户对象。用户注册后,我可以看到在我的管理控制台的用户组中成功更新了记录。问题是当我尝试登录时,它总是抛出一个用户名/密码不匹配错误。你知道原因是什么吗?我是Django的初学者,所以它可能很简单
报名表-
class SignupForm(forms.ModelForm):
class Meta:
model = User
fields = ['first_name', 'username', 'password']
widgets = {
'password': forms.PasswordInput()
}
问题是您需要对密码进行哈希运算。德扬戈。如果创建自定义用户模型,通常也应该实现。这将获取一个密码,并将其散列,例如通过调用一个方法。然后,此方法将散列密码 因此,您可以通过以下方式重写表单以保存用户:
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.set_password(self.cleaned_data['password'])
if commit:
user.save()
return user
类注册表单(forms.ModelForm):
类元:
模型=用户
字段=['名字','用户名','密码']
小部件={
“密码”:forms.PasswordInput()
}
def save(self,commit=True):
user=super().save(commit=False)
user.set_密码(自清理_数据['password'])
如果提交:
user.save()
返回用户
是,为什么不可能。然而,注册表单
应该散列密码。你能分享这张表格吗?@WillemVanOnsem添加了编辑你的解决方案非常有效,非常感谢!只有一个问题。为什么要使用“if commit:”条件?@Vaibhav:因为它应该与ModelForm
的基本save
方法兼容。如果指定.save(commit=False)
,则不应将对象保存到数据库中。