我想从模板编辑我的用户数据,下面是我的代码。
def guru_edit(request, id):
Guru = get_object_or_404(DataGuru, GuruUser_FK_id=id)
GuruUser = get_object_or_404(User, id=id)
if request.method == 'POST':
form_guru = dataguruform(request.POST, instance=Guru)
form_user = userform(request.POST, instance=GuruUser)
if form_guru.is_valid() and form_user.is_valid():
form_guru.save()
form_user.save()
return redirect('index_guru')
else:
form_guru = dataguruform(instance=Guru)
form_user = userform(instance=GuruUser)
return render(request, 'guru/guru_tambah.html', {'form_user': form_user,'form_guru':form_guru})
Run Code Online (Sandbox Code Playgroud)
这是我的forms.py
class userform(ModelForm):
class Meta:
model = User
fields = ('username','email', 'password','is_staff','is_active','is_superuser')
widgets={
'password':TextInput(attrs={'type':'password'})
}
Run Code Online (Sandbox Code Playgroud)
但是当我从模板中保存时,密码不像以前那样加密,而是明文。怎么让它铭文?
Ale*_*kli 14
不要通过表单字段设置密码。使用User.set_password()接受未加密密码的方法设置密码:
user_form = UserForm(request.POST, instance=user)
if form.is_valid():
user = user_form.save()
user.set_password('unencrypted_password') # replace with your real password
user.save()
return redirect('index_guru')
Run Code Online (Sandbox Code Playgroud)
如您所见,我在这里以更像 Django 的方式命名了变量和表单。
背景:Django 中的密码作为(最常见的 PBKDF2)哈希存储在您的数据库中。set_password负责寻找正确的散列方法并正确地对密码进行加盐和散列。
表单应仅包含用于检查您的用户是否正确输入他或她的密码的类似password和password_check字段的内容。它们不应该用于将普通密码保存到您的数据库中,我怀疑默认情况下会发生这种情况。
您也可以set_password通过覆盖该UserForm.save()方法在表单中使用。
花点时间通读本文档:
https://docs.djangoproject.com/en/dev/topics/auth/passwords/