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思想,您将在表单中处理密码。