2012-07-27 12 views
5

Quería crear un formulario para restablecer la contraseña del usuario. Debería tomar el current_password, y luego el new_password y el confirm_new_password. Puedo hacer la validación para verificar que las nuevas contraseñas coincidan. ¿Cómo podría validar el current_password? ¿Hay alguna forma de pasar el objeto User al formulario?Formulario Django + para restablecer la contraseña

Respuesta

6

Django viene con un sistema incorporado en PasswordChangeForm que puede importar y utilizar en su vista.

from django.contrib.auth.forms import PasswordChangeForm 

Pero ni siquiera tiene que escribir su propia vista de restablecimiento de contraseña. Hay un par de vistas django.contrib.with.views.password_change y django.contrib.auth.views.password_change_done, que puede enlazar directamente a la configuración de su URL.

+0

Para mis propósitos esto no funcionaría. Ya que estoy combinando el restablecimiento de contraseña dentro de un formulario que incluye muchas otras cosas. Pero esta sería la forma correcta para este caso de uso. – KVISH

+0

@KVISH Sé que este es un comentario muy tardío, pero para el registro, puede visualizar y procesar más de un formulario de Django dentro de un HTML '

'. Hay algunas razones por las que no puede usar 'PasswordChangeForm' junto con otro formulario para sus otros cambios. – Oli

0

Encontrado un muy buen ejemplo de esto: http://djangosnippets.org/snippets/158/

[EDIT]

he utilizado el enlace de arriba y hecho algunos cambios. Ellos están aquí abajo:

class PasswordForm(forms.Form): 
    password = forms.CharField(widget=forms.PasswordInput, required=False) 
    confirm_password = forms.CharField(widget=forms.PasswordInput, required=False) 
    current_password = forms.CharField(widget=forms.PasswordInput, required=False) 

    def __init__(self, user, *args, **kwargs): 
     self.user = user 
     super(PasswordForm, self).__init__(*args, **kwargs) 

    def clean_current_password(self): 
     # If the user entered the current password, make sure it's right 
     if self.cleaned_data['current_password'] and not self.user.check_password(self.cleaned_data['current_password']): 
      raise ValidationError('This is not your current password. Please try again.') 

     # If the user entered the current password, make sure they entered the new passwords as well 
     if self.cleaned_data['current_password'] and not (self.cleaned_data['password'] or self.cleaned_data['confirm_password']): 
      raise ValidationError('Please enter a new password and a confirmation to update.') 

     return self.cleaned_data['current_password'] 

    def clean_confirm_password(self): 
     # Make sure the new password and confirmation match 
     password1 = self.cleaned_data.get('password') 
     password2 = self.cleaned_data.get('confirm_password') 

     if password1 != password2: 
      raise forms.ValidationError("Your passwords didn't match. Please try again.") 

     return self.cleaned_data.get('confirm_password') 
Cuestiones relacionadas