Python 如何在django中更新密码?
我想从模板编辑我的用户数据,下面是我的代码Python 如何在django中更新密码?,python,django,Python,Django,我想从模板编辑我的用户数据,下面是我的代码 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)
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})
这是我的表格
class userform(ModelForm):
class Meta:
model = User
fields = ('username','email', 'password','is_staff','is_active','is_superuser')
widgets={
'password':TextInput(attrs={'type':'password'})
}
但当我从模板中保存时,密码并不像以前那样加密,而是纯文本。
如何将其加密?不要通过表单字段设置密码。使用
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')
正如您所看到的,我在这里以更像Django的方式命名了变量和表单
Background:Django中的密码存储为数据库中的散列(最常见的是PBKDF2)set_password
负责寻找正确的哈希方法,并正确地对密码进行加密和哈希
表单应该只包含类似于password
和password\u check
的字段,用于检查用户输入的密码是否正确。它们不应用于将普通密码保存到数据库中,我怀疑默认情况下会发生这种情况
通过重写UserForm.save()
方法,也可以在表单中使用set\u password
花点时间阅读本文档:
只需使用Django的内置表单和视图创建一个视图: 在您的
视图.py
中:
从django.contrib.auth.views导入密码更改视图
从django.contrib.auth.forms导入PasswordChangeForm
类UpdatePassword(PasswordChangeView):
form\u class=密码更改形式
成功\u url='/user/edit profile'
模板名称='app/change password.html'
在您的url.py中:
从…起导入视图
URL模式=[
路径('/change password',views.UpdatePassword.as_view(),name=“update_password”),
]
很难说,因为你没有解释密码是从哪里来的。但是我猜你设置字段密码而不是使用函数set_password
user=form_user.save()
然后user.set_password(password)
和user.save()
发布你的userform
我已经添加了我的userform@itzmeontvw为什么我们不允许从表单更改它?如果使用此方法,我必须更改我的视图,因为我说过,如果您愿意,您可以覆盖正常的UserForm.save()
方法,以便在保存表单时在表单中设置密码。您还可以在UserForm.clean()
中检查密码的有效性,例如使用Django中的validate\u password
函数。如果您使用严格的MVC思想,您将在表单中处理密码。