En este artículo vamos a ver como implementar un sistema de registro de usuarios al framework Django en su versión 1.7, de manera que no tengamos que desarrollarlo nosotros , aprovechando paquetes de tercero. Para conseguirlo vamos a usar un paquete llamado django-allauth. Este paquete nos permitirá añadir funcionalidad de registros de usuario en django mediante nombre de usuario, email, redes sociales y muchas otras opciones. Para la explicación vamos a realizar un proyecto muy sencillo que llamaremos registro_usuarios . Este proyecto tendrá un listado de artículos de texto y para acceder a verlos deberemos estar registrados y autenticados en el sistema.

1. Creación del Proyecto: registro_usuarios

Para crear el proyecto primero deberemos tener activado un entorno virtual con Django 1.7 instalado ( si no sabes como hacerlo mira este artículo).

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Como puedes ver, dispongo de un entorno virtual env-django-17 . Activo el entorno virtual el comando source y posteriormente me aseguro de tener Django 1.7 instalado. A continuación crearemos el proyecto con el comando:

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

En el siguiente punto crearemos la aplicación articulos en nuestro proyecto.

2. Crear la Aplicación articulos

Ahora vamos a crear una aplicación para nuestro proyecto. La aplicación la llamaremos articulos y contendrá un modelo Articulo y una vista listar_articulos que mostrará un listado con los artículos. Para añadir nuevos artículos y probar nuestro proyecto, sólo por no alargar el desarrollo de este artículo, usaremos el administrador de Django admin . Para crear la aplicación, desde el directorio de nuestro proyecto, ejecutamos:

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Tenemos que añadir la aplicación a INSTALLED_APPS , en archivo settings.py de nuestro proyecto:

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Modelo: Articulo

Pasamos a la creación del modelo de nuestra aplicación, editamos el fichero models.py dentro del directorio articulos:

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Una vez definido el modelo vamos a crearlo en la base de datos, para ello ejecutamos el comando makemigrations para crear los archivos de migración y migrate para aplicar los cambios en la base de datos:

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Nos pedirá también un nombre de usuario administrador para poder usarlo con el administrador de Django.

Vista: listar_articulos

Ya que tenemos el modelo Articulo creado, vamos a crear nuestra vista listar artículo. Esta vista consultará todos los artículos y los renderizará en el template listar_articulos.html . Editamos el archivo views.py de la aplicación articulos :

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Podrás observar que renderizamos un template que aún no hemos creado listar_articulos.html . Para ello crearemos una carpeta templates dentro del directorio de la aplicación articulos , dentro de la carpeta templates creamos una carpeta articulos , y finalmente dentro de esta carpeta creamos el fichero listar_articulos.html . Aqui tienes un breve resumen de la estructura de directorios de nuestro proyecto registro_usuarios :

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Template: listar_articulos.html

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

URLs

Una vez tenemos la vista creada, vamos a asociarla a una url en concreto. Queremos que el listado de artículos salga en el home de nuestro proyecto, es decir, en http://localhost:8000/. Para ello editamos el archivo urls.py con el siguiente contenido:

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Instalación de django-allauth

Para el registro de usuarios vamos a usar una aplicación de terceros: django-allauth ( más info ). Realizaremos la instalación de django-allauth con el instalador de paquetes pip :

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Esto nos instalará django-allauth en nuestro entorno virtual con sus dependencias. Ahora tenemos que editar el archivo settings.py e incluir las siguientes aplicaciones en INSTALLED_APPS :

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

También tendremos que añadir tres procesadores de contexto a los que ya trae por defecto activados Django 1.7. Para esto añadimos en el settings.py :

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

También tendremos indicar los backends de autenticación que vamos a usar, añadimos a settings.py :

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Como viste arriba, django-allauth requiere de la aplicación django.contrib.sites , para que esta funcione correctamente tendremos que añadir una último opción en settings.py :

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Una vez editado el fichero settings.py , necesitamos añadir las urls necesarias para django-allauth . Editaremos el fichero urls.py de nuestro proyecto y añadiremos la linea necesarias para django-allauth. Deberá quedar algo así:

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Por último tenemos que aplicar los cambios necesarios en nuestra base de datos para django-allauth:

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Listo, ya tenemos django-allauth instalado en nuestro proyecto, ahora vamos a hacer uso de el.

Uso básico de Django-Allauth

Vamos a hacer uso de la aplicación de registro de usuarios y autenticación que acabamos de instalar en nuestro proyecto. Para permitir que solo los usuarios autenticados puedan ver la vista listar artículo haremos uso de un decorador que nos proporciona django.contrib.auth: @login_required En views.py de la aplicación articulos importaremos el decorador y lo colocaremos encima de la linea de definción de nuestra vista. Tendremos algo así:

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Si ahora vamos a http://localhost:8000 (recuerda tener corriendo el servidor), seremos redirigido a http://localhost:8000/accounts/login/?next=/ , nos pedirá que nos autentiquemos e incluso podremos crearnos una nueva cuenta de usuario. En el caso de que no te pida usuario, es que estarás logueado como administrador, deberás entrar al administrador de Django y cerrar tu sesión. Iniciar sesión Si entramos con nuestra cuenta de administrador o una que hayamos creado desde el enlace <em>Sign up</em> podremos ver el contenido de nuestra vista listar_articulos : listado-de-articulos Ahora vamos a editar el template listar_articulos.html , para mostrar nuestro nombre de usuario y un enlace para salir en el caso de que estemos autenticados. Para esto los editamos y lo dejamos con el siguiente contenido:

$ cd mis_entornos/env-django-17/
$ source bin/activate
(env-django-17)$ pip freeze 
....
Django==1.7b4
....

Esto hará que veamos el template así: Listado de Articulos-con-usuario Con esto ya dispones de las herramientas necesarias para crear aplicaciones Django con registro de usuarios. django-allauth dispone de multitud de opciones adicionales, por ejemplo registro de usuarios con confirmación de email, autenticación  con redes sociales, y muchas más, puedes consultar todo lo que te ofrece django-allauth en su documentación oficial .