McM
mcm@noway.es
Contact me: noway.es
Contact me

First Django Simple Application(Page2)

Nuestro primer proyecto Django

A continuación se pretende describir como empezar con un proyecto Django. Se irán citando paso a paso todo lo necesario para arrancar tu primer entorno Django.

Requisitos:

  • instalar python
  • descargar la última versión de Django

No es un requisito pero facilitará mucho mas las cosas que vuestro sistema operativo sea GNU/Linux. Lo recomendamos plenamente. Dada nuestra filosofía nuestra guia se construirá sobre un sistema GNU/Linux basado en debian.

Ver seccion 1 y 3 del artículo Django anterior para instalación de python y Django.

Estructura de un proyecto Django

Si hemos instalado el framework Django, tendremos en el path django-admin.py (basta poner en consola django-admin.py) pero como hemos indicado no es estrictamente necesario hacer la instalacion:

mcm@McM:/tmp$ export PYTHONPATH=/tmp/Django-1.1

Creamos un proyecto nuevo llamado prueba:

mcm@McM:/tmp$ Django-1.1/django/bin/django-admin.py startproject prueba

Esto habrá creado un directorio nuevo en nuestro sistema de archivos llamado prueba que contiene los siguientes ficheros:

mcm@McM:/tmp$ ls -lrta prueba/
total 28
-rw-r--r--  1 mcm  mcm    542 2009-09-12 16:49 urls.py
-rw-r--r--  1 mcm  mcm   2773 2009-09-12 16:49 settings.py
-rwxr-xr-x  1 mcm  mcm    546 2009-09-12 16:49 manage.py
-rw-r--r--  1 mcm  mcm      0 2009-09-12 16:49 __init__.py
drwxrwxrwt 19 root root 12288 2009-09-12 16:49 ..
drwxr-xr-x  2 mcm  mcm   4096 2009-09-12 16:49 .

  • __init__.py: Es un archivo vacio. Indica a Python que ese directorio debe ser considerado com oun paquete Python (una aplicación)
  • manage.py: Es una utilidad con la cual mediante linea de comandos podremos interactuar con el proyecto Django de diferentes maneras.
  • settings.py: Aquí se configura el proyecto Django, BBDD, aplicaciones, etc ...
  • urls.py: contiene las URLs que son mapeadas y posteriormente despachadas mediante vistas genericas o personalizadas. Es como una tabla de contenidos, si la URL no se encuentra en este archivo no puede ser servida.

manage.py

Llegados a este punto ya podemos arrancar nuestra simple aplicación. Para ello utilizaremos el manage.py antes mencionado. Por defecto el framework Django arranca en localhost puerto 8000

mcm@McM:/tmp/prueba$ python manage.py runserver
Validating models...
0 errors found

Django version 1.1, using settings 'prueba.settings'
Development server is running at http://127.0.0.1:8000/
Quit
the server with CONTROL-C.

mcm@McM:~/tmp$ netstat -an | grep 8000
tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN  

Con el navegador podremos acceder a nuestra primera aplicación Django: http://localhost:8000/. En el navegador se mostrará la página inicial indicando que Django está funcionando:

"It worked!
Congratulations on your first Django-powered page."

FIGURA 1

Podemos arrancar el proyecto Django en cualquier otra interfaz y cualquier otro puerto de la siguiente manera:

python manage.py runserver 8080  --> puerto 8080

python manage.py runserver 0.0.0.0:8000  --> todas las interfaces, puerto 8000

settings.py

Como hemos indicado en este archivo se configurará el proyecto Django. Llegados a este punto, es necesario tener la BBDD instalada y configurada. Para ellos seguir el punto 2 del artículo anterior. Será necesario también instalar los bindings oportunos.

Visto nuestra gran orientación al software libre, nosotros eligiremos MySQL como BBDD. Como se indicó en el manual anterior, instalaremos:

root@McM:~$ apt-get install mysql-server
root@McM:~$ apt-get install python-mysqldb

Crear una nueva BBDD y un usuario nuevo:

mcm@McM:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 321
Server version: 5.0.67-0ubuntu6-log (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database linvix;
Query OK, 1 row affected (0.00 sec)

mysql> create user linvix_user identified by 'passwd';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON linvix.* TO 'linvix_user'@'localhost' IDENTIFIED BY 'passwd';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

Ahora ya podemos configurar el settings.py y poder sincronizar nuestra base de datos con la aplicación:

# Django settings for prueba project.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('mcm', 'miguelcm@gmail.com'),
)

MANAGERS = ADMINS

DATABASE_ENGINE = 'mysql'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'linvix'             # Or path to database file if using sqlite3.
DATABASE_USER = 'linvix_user'             # Not used with sqlite3.
DATABASE_PASSWORD = 'passwd'         # Not used with sqlite3.
DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.

A la hora de sincronizar, Django crea sus tablas por defecto que son las de Sesión, usuarios, grupo, permisos, message y site. También te pide que introduzcas un usuario administrador de la aplicación. Recordad que Django ofrece una consola muy completa de administración directa de todos los modelos de datos y usuarios, entre ellos el administrador (esto se va almacenando en la tabla auth_user)

mcm@McM:/tmp/prueba$ python manage.py syncdb
  from sets import ImmutableSet
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'mcm'): mcm
E-mail address: mcm@noway.es
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model

Lo mejor en cualquier projecto Django es que uses la tabla de usuarios y el modelo User que ya facilita Django. Esto hará todo más automático. Podemos mirar los campos de auth_user:

mysql> desc auth_user;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| username     | varchar(30)  | NO   | UNI | NULL    |                |
| first_name   | varchar(30)  | NO   |     | NULL    |                |
| last_name    | varchar(30)  | NO   |     | NULL    |                |
| email        | varchar(75)  | NO   |     | NULL    |                |
| password     | varchar(128) | NO   |     | NULL    |                |
| is_staff     | tinyint(1)   | NO   |     | NULL    |                |
| is_active    | tinyint(1)   | NO   |     | NULL    |                |
| is_superuser | tinyint(1)   | NO   |     | NULL    |                |
| last_login   | datetime     | NO   |     | NULL    |                |
| date_joined  | datetime     | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
11 rows in set (0.00 sec)

Los modelos Django siempre funcionan de la misma manera. El primer campo suele ser el id que es siempre un campo que se autoincrementa. En los mismos modelos de Python serás tu quien establezcas las relaciones entre modelos (campos many to many, etc ...)

Con la BBDD y el framework funcionando ya se puede empezar a crear modelos, vistas y plantillas.

En el archivo settings.py también podemos ver las aplicaciones instaladas (INSTALLED_APPS). Por defecto y en relación también a las tablas creadas que acabamos de ver se crean por defecto las siguientes aplicaciones:

  • django.contrib.auth -- Sistema de autenticación
  • django.contrib.contenttypes -- framework para los content types.
  • django.contrib.sessions -- framework para controlar las sesiones.
  • django.contrib.sites -- framework para gestionar varios sites en una misma aplicación Django.

Como hemos dicho estas aplicaciones son instaladas por defecto y es conveniente su uso para gestion de usuarios, autenticación, sesión, etc ...

En la siguiente página encontrareis la primera aplicación dentro de este nuevo proyecto Django.

Share it!

Twitter Gmail Delicious Google Bookmarks Hotmail Yahoo Mail Share/Bookmark