2016-12-21 13 views
0

私はテンプレートから私のユーザデータを編集したい、私のコードは以下の通りです。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) 
     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}) 

これは私の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'}) 
    } 

ですが、私は、テンプレートから保存した際に、パスワードはそれがために使用のように暗号化されたが、ちょうど平文されていません。 暗号化するには?

+0

ハードパスワードは、このすべてに入ってくるところを説明していけないからです。しかし、あなたは 'set_password'関数を使用する代わりに*フィールド*パスワードを設定すると推測します。 – Sayse

+0

' user = form_user.save() '' '' user.set_password(password) ''と '' user.save() ' –

+0

あなたの' ' ' – itzMEonTV

答えて

1

フォームフィールドでパスワードを設定しないでください。あなたが見ることができるように、私は、ここではもう少しジャンゴっぽい方法で変数やフォームを命名した

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

:あなたの暗号化されていないパスワードを受け入れUser.set_password()方法でパスワードを設定します。

背景:Djangoのパスワードは、データベースに(最も一般的なPBKDF2)ハッシュとして保存され、SECRET_KEYで暗号化されています。 set_passwordは正しいハッシング方法を探し出し、パスワードを正しく暗号化します。

フォームには、ユーザーがパスワードを正しく入力したかどうかを確認するために使用されるpasswordフィールドとpassword_confirmフィールドが含まれている必要があります。それらは、の平文のパスワードをデータベースに保存するために使用すべきではありません。

フォーム内にset_passwordを使用して、UserForm.save()メソッドをオーバーライドすることもできます。

は、本書を通読するのに時間をかけて:言って

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

+0

なぜフォームから変更できないのですか?このメソッドを使用する場合は、私は自分のビューを変更する必要があります – Gusan

+0

私はあなたがしたい場合は、保存時にパスワードをフォームに設定する通常の 'UserForm.save()'メソッドをオーバーライドすることができます。あなたは 'UserForm.clean()'のパスワードの有効性を例えば以下のようにチェックすることもできます。 Djangoの 'validate_password'関数です。あなたが厳格なMVCのイデオロギーを持っていれば、フォームのパスワードを扱うでしょう。 –

関連する問題