创建用户时密码未保存

我知道有数百篇关于该主题的文章,但是在所有这些文章中,有一些与我自己的程序略有不同,并且我无法使其适应我的程序,因为Django处理密码的方式太乱了我什么都不懂。非常感谢您的帮助,在此先感谢您。

因此,当新用户注册时,一切都会正常进行,但是以某种方式,密码未保存在数据库中。当我进入管理界面时,它告诉我密码格式无效或哈希函数未知。

这是我的代码:

Forms.py

class InscriptionForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ['username','first_name','last_name','email','password']
        widgets = {'username': forms.TextInput(attrs={'class': 'form-control'}),'first_name': forms.TextInput(attrs={'class': 'form-control'}),'last_name': forms.TextInput(attrs={'class': 'form-control'}),'email': forms.EmailInput(attrs={'class': 'form-control'}),'password': forms.PasswordInput(attrs={'class': 'form-control'})}

    def clean_password(self):
        password = self.cleaned_data['password']
        try:
            validate_password(password,user=self)
        except forms.ValidationError:
            self.add_error('password',password_validators_help_texts())

        return password

Views.py

def inscription(request):
    if request.method == "POST":
        form = InscriptionForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            authenticate(username=form.cleaned_data['username'],password=form.cleaned_data['password'],)
            login(request,new_user)
            request.session['is_connected'] = True
            return redirect(inscription_suite)
    else:
        form = InscriptionForm()

    return render(request,'inscription/inscription.html',{'form': form})

我已经尝试过像这样修改视图:

def inscription(request):
    if request.method == "POST":
        form = InscriptionForm(request.POST)
        if form.is_valid():
            new_user = form.save(commit=False)
            new_user.password = make_password(form.cleaned_data['password'])
            authenticate(username=form.cleaned_data['username'],new_user)
            new_user.save()
            request.session['is_connected'] = True
            return redirect(inscription_suite)
    else:
        form = InscriptionForm()

    return render(request,{'form': form})

但是会引发以下错误ValueError at /inscription Cannot force an update in save() with no primary key.

有人可以帮我吗?

谢谢!

ctq1989 回答:创建用户时密码未保存

您必须使用set_password()保存密码。

def inscription(request):
    if request.method == "POST":
        form = InscriptionForm(request.POST)
        if form.is_valid():
            new_user = form.save(commit=False)
            password = form.cleaned_data['password'] # get password
            new_user.set_password(password) # set the password
            new_user.save() # save the user
            authenticate(username=form.cleaned_data['username'],password=form.cleaned_data['password'],)
            login(request,new_user)
            request.session['is_connected'] = True
            return redirect(inscription_suite)
    else:
        form = InscriptionForm()

    return render(request,'inscription/inscription.html',{'form': form})
本文链接:https://www.f2er.com/2872875.html

大家都在问