2016-10-28 1 views
0

Ich versuche django-registration 's RegistrationFormUniqueEmail Form, die zur Zeit sieht wie folgt aus:Django Wie bekomme ich ein Passwort, nachdem das Anmeldeformular eingereicht wurde?

class RegistrationFormUniqueEmail(RegistrationForm): 
    """ 
    Subclass of ``RegistrationForm`` which enforces uniqueness of 
    email addresses. 

    """ 
    def clean_email(self): 
     """ 
     Validate that the supplied email address is unique for the 
     site. 

     """ 
     if User.objects.filter(email__iexact=self.cleaned_data['email']): 
      raise forms.ValidationError(validators.DUPLICATE_EMAIL) 
     return self.cleaned_data['email'] 

Ich möchte ein Formular implementieren, die überprüft, ob das Passwort eine Nummer und einen besonderen Charakter, aber ich zu bearbeiten Kann ich das Passwort nicht erhalten? Ich bin mir nicht sicher, ob es überhaupt möglich ist, aber hier ist, was ich versucht, das Passwort zu erhalten:

self.cleaned_data['id_password2'] 
self.cleaned_data['password2'] 
self.cleaned_data['password'] 
self.cleaned_data.get('id_password2') 
self.cleaned_data.get('password2') 
self.cleaned_data.get('password') 

alle diese zurückgeben NoneType Objekt.

Ich habe auch versucht, eine clean_password2 Funktion zu definieren, aber keine Hilfe. Ist das machbar? Und wie?

Vielen Dank für jede Hilfe,

Antwort

1

Gereinigt Daten nicht ein Attribut ist, wenn Sie ein Formular erstellen, wird hinzugefügt, wenn Sie anrufen is_valid() auf einem Formular.

is_valid() überprüft, ob die Daten mit der Einschränkung übereinstimmen, die Sie beim Erstellen des Formulars festgelegt haben (in diesem Fall passendes Passwort und eindeutige E-Mail standardmäßig für eine RegistrationFormUniqueEmail). Es könnte sinnvoll sein, die is_valid() oder erstellen Sie eine andere Funktion zu überschreiben, die zusätzlich is_valid() ruft, um zusätzliche Kontrollen auf der Passwortstärke durchgeführt wird, statt eine zusätzliche Validierung außerhalb des Standardverfahrens

def custom_is_valid(self): 
    valid = self.is_valid() 
    if password.is.not.secure(): 
     self.add_error('password', ValidationError(('Insecure Password'), code='invalid')) 
     valid = False 
    return valid 

Die obige snipped könnte Mache den Trick. Die Zeichenfolge "password" fügt den Fehler hinzu und heftet ihn an das von Ihnen angegebene Formularfeld. Vielleicht möchten Sie password1 oder password2 verwenden, weil ich denke, dass dies der Feldname für das von Ihnen verwendete Formular ist. Außerdem würden Sie cleaned_data nicht verwenden, um die Gültigkeit des Passworts zu überprüfen. Sie würden einfach das Datenattribut form.data ['password'] verwenden.

+0

Vielen Dank! Und wie aktiviere ich die 'custom_is_valid' Funktion? Ich denke, ich muss diese Funktion irgendwie binden, damit sie aufgerufen wird, nachdem das Formular abgeschickt wurde? – jeff

+0

Sie müssen es nur manuell aufrufen –

+0

Ok, danke. Ich habe gerade meinen Check in der bereits vorhandenen "clean_email" implementiert. Ich weiß nicht wie, aber es wird aufgerufen, nachdem das Formular eingereicht wurde, also überprüfe ich die beiden Felder auf einmal :) – jeff

Verwandte Themen