Registro de usuarios

Django versión 1.0
SO Debian lenny
Necesito hacer un formulario de registro de usuario que contenga nombre de usuario correo electrónico y contraseña.
Si bien como dice el Django book en el capítulo 14 Django proporciona un formulario prefabricado que se puede usar con este fin con el modulo UserCreationForm como se describe en el ejemplo, este gestiona solo usuario y contraseña no posee campo de correo electrónico.
Por eso decidí crear un formulario que ingresara estos datos a bajo nivel como también se describe en ese capitulo del libro.

Para empezar agregue la siguiente entrada a urls.py


(r'^register/$', 'mysite.books.views.register'),

Luedo escribí la clase register_user formulario en forms.py

class register_user(forms.Form):
    usuario = forms.CharField(max_length=30)
    email = forms.EmailField()
    password1 = forms.CharField(max_length=10, widget= forms.PasswordInput)
    password2 = forms.CharField(max_length=10, widget= forms.PasswordInput)

Esta clase define los campos del formulario que son una entrada de usuario, e- mail, contraseña y repetir la contraseña.
En views.py primero importo desde forms.py register_user para usarlo en la función register.

from forms import register_user

Luego defino la función register de esta manera:


def register(request):
    if request.method == 'POST':
        form = register_user(request.POST)
        if form.is_valid():
            #cd = form.cleaned_data
            name_user = form.cleaned_data['usuario']
            email_user = form.cleaned_data['email']
            pass_user = form.cleaned_data['password1']
create_user = User.objects.create_user(username= name_user, email= email_user,
password=pass_user)

            create_user.is_staff = True
            create_user.save()
            return HttpResponseRedirect('/specials_books/')
    else:
        form = register_user()
    return render_to_response('registration/register.html', {'form': form})

Si hay un envío del formulario por medio del método POST accedo a los datos y los guardo en form, se validan y volvemos a acceder por medio de cleaned_data


name_user = form.cleaned_data['usuario']
            email_user = form.cleaned_data['email']
            pass_user = form.cleaned_data['password1']

Luego creamos un usuario con estos datos


create_user = User.objects.create_user(username= name_user, email= email_user,
password=pass_user)

Y luego los guardamos.


create_user.is_staff = True
create_user.save()

Esta vista asume que existe la carpeta registration y dentro el archivo register.html que sería algo así


<div class="form_subtitle">crear un nuevo usuario</div>
                 <form name="." method="post">          
                    <div class="form_row">
                    <div class="contact_input" />{{ form.usuario.errors }}</div>
                    <label class="contact"><strong>usuario:</strong></label>
                    <div class="contact_input" />{{ form.usuario }}</div>
                    </div>  

                    <div class="form_row">
                    <div class="contact_input" />{{ form.email.errors }}</div>
                    <label class="contact"><strong>Email:</strong></label>
                    <div class="contact_input" />{{ form.email }}</div>
                    </div>

                    <div class="form_row">
                    <div class="contact_input" />{{ form.password1.errors }}</div>
                    <label class="contact"><strong>contraseña:</strong></label>
                    <div class="contact_input" />{{ form.password1 }}</div>
                    </div>


                    <div class="form_row">
                    <div class="contact_input" />{{ form.password2.errors }}</div>
                    <label class="contact"><strong>de vuelta:</strong></label>

                    <div class="contact_input" />{{ form.password2 }}</div>
                    </div>

                    <div class="form_row">
                    <input type="submit" class="register" value="registrar" />
                    </div>   
                  </form>     
                </div>

Agregando más validación

Además del sistema de validación que proporciona el objeto form, decidí agregar dos mas, que la cantidad de dígitos de la contraseña no sea menor que cuatro y que sea necesario escribirla de vuelta.
Para ello se agrego dentro la clase register_user en el archivo forms.py las funciones
clean_password1 y clean_password2 quedando el código completo así.


class register_user(forms.Form):
    usuario = forms.CharField(max_length=30)
    email = forms.EmailField()
    password1 = forms.CharField(max_length=10, widget= forms.PasswordInput)
    password2 = forms.CharField(max_length=10, widget= forms.PasswordInput)

#Validar de la cantidad de letras del password
    def clean_password1(self):
        password1 = self.cleaned_data.get('password1', '')
        num_words = len(password1)
        if num_words < 4:
            raise forms.ValidationError('Ingrese mas de cuatro palabras')
        return password1
#Comparar las dos contraseñas
    def clean_password2(self):
        password1 = self.cleaned_data.get('password1', '')
        password2 = self.cleaned_data.get('password2', '')
        if password1 != password2:
            raise forms.ValidationError('Repita la contraseña correctamente')
        return password2

Todo esto puede verse funcionando en el proyecto webookstore donde fue usado.

Advertisement
  1. Aún no hay trackbacks

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.