如何更新django中的密码?

时间:2016-12-21 07:30:08

标签: python django

我想从模板编辑我的用户数据,下面是我的代码。

contexts {
  cassandra-pool = {
    fork-join-executor {
      parallelism-factor = 1.0
      parallelism-max = 200
    }
  }
}

这是我的forms.py

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})

但是当我从模板中保存时,密码不会像过去那样加密,而只是纯文本。 如何让它入伍?

2 个答案:

答案 0 :(得分:2)

请勿通过表单字段设置密码。使用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-ish方式命名变量和形式,如您所见。

背景:Django中的密码作为(最常见的PBKDF2)哈希存储在您的数据库中,并使用您的SECRET_KEY进行加密。 set_password负责寻找正确的哈希方法并正确加密您的密码。

表单应仅包含passwordpassword_confirm字段,用于检查用户是否正确输入了密码。它们不应该用于将 plain 密码保存到数据库中,我怀疑这是默认情况下发生的。

您也可以通过覆盖set_password方法在表单中使用UserForm.save()

花点时间阅读本文档:

https://docs.djangoproject.com/en/1.10/topics/auth/passwords/

答案 1 :(得分:1)

只需使用 Django 的内置表单和视图创建一个视图:

在您的 views.py 中:

from django.contrib.auth.views import PasswordChangeView
from django.contrib.auth.forms import PasswordChangeForm

class UpdatePassword(PasswordChangeView):
    form_class = PasswordChangeForm
    success_url = '/user/edit-profile'
    template_name = 'app/change-password.html'

在您的 urls.py 中:


from . import views

urlpatterns = [
path('/change-password', views.UpdatePassword.as_view(), name="update_password"),
]