2017-10-13 4 views
1

Das Passwort wird nicht in der neuen Benutzerregistrierung gespeichert. Ich schrieb in views.pyPasswort wird nicht gespeichert

def regist(request): 
    regist_form = RegisterForm(request.POST or None) 
    context = { 
     'regist_form': regist_form, 
    } 
    return render(request, 'registration/regist.html', context) 

@require_POST 
def regist_save(request): 
    regist_form = RegisterForm(request.POST) 
    if regist_form.is_valid(): 
     user = regist_form.save(commit=False) 
     password = regist_form.cleaned_data.get('password') 
     user.set_password(password) 
     user.save() 
     login(request, user) 
     context = { 
      'user': request.user, 
     } 
     return redirect('detail') 

    context = { 
     'regist_form': regist_form, 
    } 
    return render(request, 'registration/regist.html', context) 

in regist.html

<div class="heading col-lg-6 col-md-12">
    
 
     <h2>New account registration</h2> 
 
    
 
     <form class="form-horizontal" action="regist_save/" method="POST">
    
 
      <div class="form-group-lg">
    
 
      <label for="id_username">username</label> 
 
      
   {{ regist_form.username }}
    
 
      </div>
   
    
 
      <div class="form-group-lg">
    
 
      <label for="id_email">email</label> 
 
      
    {{ regist_form.email }} 
 
      </div> 
 
      <div class="form-group-lg">
    
 
      <label for="id_password">password</label>
    
 
      {{ regist_form.password1 }}
    
 
      </div>
   
    
 
      <div class="form-group-lg"> 
 
      <label for="id_password">password(conformation)</label>
    
 
      {{ regist_form.password2 }} 
 
      <p class="help-block">{{ regist_form.password2.help_text }}</p>
    
 
      </div>
   
    
 
      <div class="form-group-lg"> 
 
      <div class="col-xs-offset-2"> 
 
      <button type="submit" class="btn btn-primary btn-lg">SUBMIT</button>
    
 
      <input name="next" type="hidden"/>
    
 
      </div> 
 
      </div> 
 
      {% csrf_token %}
    
 
     </form>
    
 
</div>

in forms.py

class RegisterForm(UserCreationForm): 
    class Meta: 
     model = User 
     fields = ('username', 'email','password1','password1',) 
    def __init__(self, *args, **kwargs): 
     super(RegisterForm, self).__init__(*args, **kwargs) 
     self.fields['username'].widget.attrs['class'] = 'form-control' 
     self.fields['email'].widget.attrs['class'] = 'form-control' 
     self.fields['password1'].widget.attrs['class'] = 'form-control' 
     self.fields['password2'].widget.attrs['class'] = 'form-control' 

Benutzername & E-Mail ist normal registriert. Also kann ich wirklich nicht verstehen, warum das Passwort nicht registriert ist. Ich lese Django Tutorial und ich denke mein Code ist in Ordnung.

Wie soll ich das beheben? Was soll ich schreiben?

+0

Änderung 'regist_form.cleaned_data.get ('password')' auf 'regist_form.cleaned_data.get ('password1')' – itzMEonTV

Antwort

2

Ihr Formular hat die Felder password1 und password2 und nicht password und regist_form.cleaned_data.get('password') zurück keine. So sollten Sie password1 Feld password umbenennen:

class RegisterForm(UserCreationForm): 
    class Meta: 
     model = User 
     fields = ('username', 'email','password', 'password2',) 
+0

thx ur comments.I haben 2 Kennwort archiviert, weil es überprüft wird, um zu bestätigen, ob 1. und 2. Kennwort gleich oder nicht ist. Ich kann Ihren Code nicht verstehen, kann mein ideales sysgtem tun. Ist es ok? – user8504021

+0

@ user8504021 Zwei Passwortfelder sind OK. Ich meine, dass Ihre Form kein Passwortfeld hat. Sie versuchen jedoch, in der Ansicht darauf zuzugreifen: 'password = registr_form.cleaned_data.get ('password')'. Diese Zeile gibt immer None zurück. Sie können das Problem beheben, indem Sie eines Ihrer Formularfelder in 'password' umbenennen oder einfach die Ansicht wechseln. Ersetzen Sie 'password' durch' password1': 'password = registr_form.cleaned_data.get ('password1')' – neverwalkaloner

Verwandte Themen