On Tue, Apr 14, 2015 at 4:18 AM, Frank Bieniek
<[email protected]> wrote:
> Hi Larry,
>
> You could configure the routes in the urls.py, take the create user route
> and plug in your CustomPasswordForm...
> ...
> customization example of the userena urls for the normal frontend
>
> ... url(r'^(?P<username>[\.\w]+)/password/$',
>         userena_views.password_change, {"pass_form": PasswordChangeForm},
>         name = 'userena_password_change'),

With some help I was able to get this working. As I suspected, it was
very simple:

class AdminPasswordChangeForm(auth_forms.AdminPasswordChangeForm):
    def clean_password1(self):
        return validate_password_strength(self.cleaned_data['password1'])

class UserCreationForm(auth_forms.UserCreationForm):
    def clean_password1(self):
        return validate_password_strength(self.cleaned_data['password1'])

class UserAdmin(auth_admin.UserAdmin):
    change_password_form = AdminPasswordChangeForm
    add_form = UserCreationForm

# Re-register UserAdmin
admin.site.unregister(auth_models.User)
admin.site.register(auth_models.User, UserAdmin)

>
> Am Freitag, 10. April 2015 21:15:17 UTC+2 schrieb [email protected]:
>>
>> I am trying to add custom password validation to the create user and
>> change password admin forms. I did not see anything in the django docs
>> about how to do this. From what I read on stackoverflow and other
>> sites it seems I have to write a validator and then someone hook it
>> into the add and change forms.
>>
>> Here's what I have now in my apps admin.py:
>>
>> def validate_password_strength(value):
>>     """Validates that a password is as least 10 characters long and has at
>> least
>>     2 digits and 1 Upper case letter.
>>     """
>>     min_length = 10
>>
>>     if len(value) < min_length:
>>         raise ValidationError(_('Password must be at least {0} characters
>> '
>>                                 'long.').format(min_length))
>>
>>     # check for 2 digits
>>     if sum(c.isdigit() for c in value) < 2:
>>         raise ValidationError(_('Password must container at least 2
>> digits.'))
>>
>>     # check for uppercase letter
>>     if not any(c.isupper() for c in value):
>>         raise ValidationError(_('Password must container at least 1
>> uppercase letter.'))
>>
>> class MySetPasswordForm(SetPasswordForm):
>>     def __init__(self, *args, **kwargs):
>>         super(MySetPasswordForm, self).__init__(*args, **kwargs)
>>
>> self.fields['password1'].validators.append(validate_password_strength)
>>
>> But what I can't figure out is how do I get MySetPasswordForm to be
>> used. Can anyone help me with this. If i am way off base, can someone
>> point me in the right direction. Thanks!

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CACwCsY6RBh5qamPMYf1fCqPZGriR3OXCLj2fQS8wRKd2cW6cWA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to