我想从模板编辑我的用户数据,下面是我的代码。
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})
但是当我从模板中保存时,密码不会像过去那样加密,而只是纯文本。 如何让它入伍?
答案 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
负责寻找正确的哈希方法并正确加密您的密码。
表单应仅包含password
和password_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"),
]