Django不在数据库中存储密码

时间:2020-02-18 15:22:59

标签: python django forms django-models view

当我从视图中打印密码时,它在命令提示符下显示为non 我在forms.py中仅使用password1 我把pass2 = none

Models.py:-

class Profile(models.Model):
            user = models.OneToOneField(User, on_delete=models.CASCADE)
            bio = models.TextField(max_length=500, blank=True)
            location = models.CharField(max_length=30, blank=True)
            birth_date = models.DateField(null=True, blank=True)
            gender = models.CharField(max_length=10,blank=True)

            def __str__(self):
                return self.fullname

Forms.py:-

class UserForm(forms.ModelForm):
            username = forms.CharField(widget=forms.TextInput(attrs={'class':'validate','placeholder': 'Enter Username'}))
            password1 = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder':'Enter Password'}))
            email=forms.EmailField(widget=forms.TextInput(attrs={'placeholder':'Enter Email'}))
    password2=None


            class Meta:
                model=User
                fields=['username','password1','email']



        class ProfileForm(forms.ModelForm):
            fullname = forms.CharField(widget=forms.TextInput(attrs={'placeholder':'Enter fullname'}))
            class Meta:
                model=Profile
                fields=['fullname']

views.py:-

def register(request):
        if request.method =='POST':
            form = UserForm(request.POST)
            profile_form = ProfileForm(request.POST)
            if form.is_valid() and profile_form.is_valid():
                user=form.save()
                profile=profile_form.save(commit=False)
                profile.user=user
                profile.save()
                username= form.cleaned_data.get('username')
                password= form.cleaned_data.get('password')
                print(username)
                print(password)
                messages.success(request,f'account created for {{ username }}')
                return redirect('home')
        else:
            form = UserForm()
            profile_form = ProfileForm()
        context={'form':form , 'profile_form':profile_form}
        return render(request, 'users/register.html',context)

**当我在浏览器中打印密码时,它显示无。我也只使用password1 **

2 个答案:

答案 0 :(得分:0)

您正在使用django随附的用户模块。

libwrapper.so

Django,用于以加密格式将数据存储在db.sqlite文件中。您需要一个秘密密钥才能在解密时访问settings.py文件中的密钥。您可以使用它解密所有数据,但不能解密密码

密码将在sha256算法中哈希16次迭代,因此您无法获取密码,默认情况下会完成此操作 如果您想重设密码,请使用put呼叫重设密码

答案 1 :(得分:0)

问题出在您的UserForm

它需要以下字段:['username','password1','email'] 来自User模型,就好像它们已经存在一样。

User模型没有没有名为"password1"的字段。它确实有一个"password"字段。

因此,如果您将UserForm Meta类中的字段更改为['username','password','email']并同时更改UserForm“ password1”字段,则它将起作用。

现在,当您保存有效表单时,它将实际上将一个字段("password")传递到User model,以便生成哈希密码。

相关问题