7
votes

Appliquer une longueur minimale dans le mot de passe Django

J'utilise actuellement django.contrib.auth.views.password_password_reset_confirm code> Pour modifier le mot de passe d'un utilisateur. Voici comment mes URL apparaissent:

# django.contrib.auth.views
def clean_new_password2(self):
    password1 = self.cleaned_data.get('new_password1')
    password2 = self.cleaned_data.get('new_password2')
    if password1 and password2:
        if len(password1) < 8:
            raise forms.ValidationError(_("Password must be at least 8 chars."))
        if password1 != password2:
            raise forms.ValidationError(_("The two password fields didn't match."))
    return password2


1 commentaires

si len (mot de passe1) <7 accepte un mot de passe de longueur 7 (qui n'est pas d'au moins 8)?


3 Réponses :


2
votes

1 commentaires

Superbe réponse, j'ai ajouté une autre réponse avec le code que j'ai finalement écrit Stackoverflow.com/a/20678355/340128



4
votes

J'utilise le plugin Django-Inscription, que j'ai trouvé excellent, mon exemple est basé sur cela. Mais vous pourriez faire une chose très similaire sans cela.

Ce message fait un bon travail de marcher sur la manière de remplacer un formulaire (et un widget) pour Django-inscription - dans ce cas pour un bloqueur de botte de spam reCAPTCHA. P>

Que Vous devez faire, c'est remplacer la classe d'enregistrement (comme ci-dessous) et pointez votre URLS.py pour l'utiliser au lieu de la formulation d'enregistrement par défaut p> xxx pré>

(dans une classe de formulaire, Django sera Recherchez des fonctions qui commencent par Nettoyer _ code> et terminez par un nom de champ (comme mot de passe1 code>) pour exécuter lors de la validation du formulaire.) p>

L'autre bit important est Pour utiliser le formulaire dans vos urls.py, comme: P>

from django.conf.urls.defaults import *
from registration.views import register

from myapp.forms import MinPasswdLenRegistrationForm

urlpatterns = patterns('',
    url(r'^register/$', register,
        {'form_class': MinPasswdLenRegistrationForm},
        name='registration.views.register'),
    (r'', include('registration.urls')),
)


0 commentaires

6
votes

Le code que j'ai finalement écrit après la compréhension de la réponse acceptée d'Arthur:

Ceci est la forme héritée: xxx

dans le urls.py Vous pouvez instruire la vue d'utiliser le formulaire personnalisé en spécifiant set_password_form : xxx


0 commentaires