Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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 Django:我可以使用CreateView创建一个用户对象,其中用户就是Django';s内置用户模型?_Python_Django_Django Views_Web Development Server - Fatal编程技术网

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)
,则不应将对象保存到数据库中。