Registro de usuarios en Django


En esta entrada haremos un registro de usuarios utilizando un framework de Python llamado “Django“. Posteriormente, en otra entrada veremos como podemos hacer un login con los usuarios registrados.

Para empezar crearemos el proyecto y nuestra aplicación. (Si no tienes instalado Django, mira este otro post)

django-admin.py startproject testusers
cd testusers/
python manage.py startapp web

Ahora necesitamos crear una base de datos, y poner el “usuario”, “contraseña” y “host” que hayas usado dentro del fichero settings.py.

Una vez hecho esto vamos a la terminal y le activamos el admin de Django con el siguiente comando:

python manage.py syncdb

Esto nos creará las tablas necesarias para activar el admin.

Ahora que ya tenemos la base de datos creada junto con las tablas necesarias, crearemos las URLs que usaremos para el registro. Abrimos el archivo urls.py y añadimos esta URL.

url(r'^register/', 'web.views.register_user', name='register_user'),

Ahora que tenemos la URL vamos a crear la vista. Para ello, abrimos el fichero views.py que hay dentro de la aplicación y copiamos la siguiente vista:

def register_user(request):
	username = password = email =''
	if request.POST:
		user_form = UserCreateForm(request.POST)
		if user_form.is_valid():
			usuario = User(username=request.POST['username'], email=request.POST['email'])
			usuario.set_password(request.POST['password1'])
			usuario.save()
			return HttpResponseRedirect(reverse('register_user'))
	else:
		user_form = UserCreateForm()

	dictionary = {
		'user_form': user_form,
		'page_title': 'Aplicacion - Register',
		'body_class': 'register',
	}
	return render_to_response("register.html", dictionary, context_instance=RequestContext(request))

En esta vista usamos un formulario para registrar al usuario que aun no hemos creado “UserCreateForm”. Vamos a crearlo. Para ello dentro de la aplicación tendremos que crear un fichero llamado forms.py.

Dentro de el escribiremos el siguiente código:

# -*- coding: utf-8 -*-
from django import forms
from django.forms import ModelForm
from models import *
from django.forms.extras.widgets import *
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User


class UserCreateForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ( "username", "email" )

	def clean_email(self):
		email = self.cleaned_data['email']
		if User.objects.filter(email=email).exists():
			raise ValidationError("Email already exists")
		return email

	def clean(self):
		form_data = self.cleaned_data
		if form_data['password'] != form_data['password']:
			self._errors["password"] = "Password do not match"
			del form_data['password']
		return form_data

    def __init__(self, *args, **kwargs):
		super(UserCreateForm, self).__init__(*args, **kwargs)
		self.fields['username'].widget.attrs.update({'class' : 'form-control', 'required': 'required'})
		self.fields['email'].widget.attrs.update({'class' : 'form-control', 'required': 'required'})
		self.fields['password1'].widget.attrs.update({'class' : 'form-control', 'required': 'required'})
		self.fields['password2'].widget.attrs.update({'class' : 'form-control', 'required': 'required'})

Después de haber creado el formulario lo importaremos en el fichero “views.py” junto con otras librerias o elementos necesarios, añadiendo arriba del todo lo siguiente:

from django.shortcuts import render_to_response, redirect, render
from django.template import RequestContext, loader, Context, Template
from TU_APLICACION.forms import *
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse 
from django.contrib.auth import authenticate, login, logout
from django.http import *

Ahora por ultimo nos faltará crear el fichero “register.html”, para ello creamos una carpeta dentro de la aplicación que se llame “templates” y dentro crearemos el fichero “register.html” en el que pondremos el siguiente código:

{% extends "base.html" %}

{% block content %}
	<div class="well">
		<h2 class="text-center">Crear usuario</h2>
		{% if form.subject.errors %}
    <ol>
    {% for error in user_form.subject.errors %}
        <li><strong>{{ error|escape }}</strong></li>
    {% endfor %}
    </ol>
{% endif %}
		<form class="form-horizontal text-center center-block" name="RegisterForm" id="registerForm" action="{% url 'register_user' %}" method="post">
			{% csrf_token %}
			{{ user_form.as_p }}
			<button type="submit" class="btn btn-primary">Registrarme</button>
		</form>
	</div>
{% endblock content %}

Y crearemos otro llamado “base.html” con el siguiente código:

<!DOCTYPE html>
<html lang="es">
	<head>
		<meta charset="utf-8" />
		<title>{{page_title}}</title>
		<link rel="stylesheet" href="{{STATIC_URL}}css/styles.css" />
	</head>
	<body class="{{body_class}}">

		<div class="container">
			{% block content %}{% endblock content %}
		</div>

	</body>
</html>

Esto es todo, ya tenemos un formulario de registo, para ver si los usuarios se han registrado se puede entrar dentro del admin y mirarlos en “users”.

En el siguiente tutorial haremos un login de usuarios en django.

You may also like

Comments are closed here.