Blackhold

arrancando django y primer script

Posted on octubre 23rd, 2009 by admin

Pues parece que tras la correcta (espero) instalación de django, ahora toca empezar a hacer un primer script.

Para aquellos que os canséis de los comentarios o anotaciones estúpidas que hago tenéis la fuente en este link.

En una de las cajas de comentarios que hay comentan, si eres un phpero, python no es php! los ficheros que programas no van en /var/www en el caso que vayas a hacer una página web, esto puede ser incluso peligroso, así que creamos un directorio donde vivirán todos nuestros proyectos.

Para crear un nuevo proyecto lo haremos con el django-admin.py

$ cd ~/scripts/django
$ django-admin.py startproject holamundo

Esto nos crea un directorio con 4 ficheros con extensión .py:
* __init__.py: Es un fichero vacío que le dice a Python que este directorio debe tratarse como un paquete de python.
* manage.py: Una utilidad de consola que te permite interactuar con el proyecto Django de varias formas. Puedes leer todos los detalles sobre manage.py en django-admin.py y manage.py.
* settings.py: Propiedades/Configuración de este proyecto Django. Las propiedades de Django nos darán alguna pista de como funcionan.
* urls.py: Las declaracion de las URL para este proyecto; una “tabla de contenidos” de tu página bajo django.

Ejecutar el proyecto
Ahora vamos a comprobar que nuestro proyecto funciona (si, esto ya es un proyecto funcional, pero vacío). Para ello entramos al directorio del proyecto y escribimos:

$ python manage.py runserver
Validating models…
0 errors found

Django version 1.2 pre-alpha SVN-11638, using settings ‘holamundo.settings’
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Bien, ¿y ahora qué? si no te funciona o no tienes el django funcionando o has toqueteado el código antes de tiempo.

Si todo es correcto y te aparece esto, vamos a un navegador y nos dirigimos a nuestra maquina en el puerto 8000, tal como nos indica el output anterior.

En el caso que queramos ejecutar el proyecto en otro puerto vamos a indicarle al final el puerto de ejecución deseado.

$ python manage.py runserver 8080

si queremos hacer que nuestro proyecto vaya un poco mas allá de localhost, además del puerto indicaremos el rando de ips, en el ejemplo todas las redes.

$ python manage.py runserver 0.0.0.0:8000

Configurar las bases de datos
Una de las propiedades de django es que nos permite conectarnos a bases de datos, así que crearemos una y la configuraremos tal como nos indica la página web en el fichero settings.py

DATABASE_ENGINE = ‘mysql’
DATABASE_NAME = ‘django1’
DATABASE_USER = ‘root’
DATABASE_PASSWORD = ‘******’
DATABASE_HOST = ‘localhost’
DATABASE_PORT = ‘3306’

Como podéis ver, uso una base de datos mysql. Recuerdo que es recomendable crear un usuario para trabajar con la base de datos. Lo del ejemplo de arriba es descuidado.

Si bajamos en el settings.py vamos a ver lo siguiente:

INSTALLED_APPS = (
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.sites’,
)

cada una de estas líneas es un programa que añadimos a django, estos 4 se activan por defecto:

* django.contrib.auth — Un sistema de autenticación.
* django.contrib.contenttypes — A framework for content types.
* django.contrib.sessions — A session framework.
* django.contrib.sites — A framework for managing multiple sites with one Django installation.

Ahora vamos a crear las tablas del proyecto en la base de datos:

$ python manage.py syncdb

esto va a mirar las INSTALLED_APP y va a crear las tablas necesarias para cada uno de los programas.

Si al ejecutar esto nos sale una ristra de errores y que termina así:

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

Es porque el python no se entera como acceder a las bases de datos y será necesario instalar el plugin de mysql para python

# apt-get install python-mysqldb

Una vez instalado volvemos a ejecutar el anterior comando de python y nos empieza a hacer algunas preguntas.

laura@sofre:~/scripts/django/holamundo$ python manage.py syncdb
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 ‘laura’):
E-mail address:
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model

Tras esto podemos ver que ha creado algunas tablas en la base de datos que le hemos dicho.

Proyectos y aplicaciones
Un proyecto es un conjunto de aplicaciones, antes hemos creado el proyecto holamundo, y ahora vamos a crear una aplicación que se llame encuestas.

$ python manage.py startapp encuestas

esto nos ha creado otro directorio, con mas ficheritos autogenerados:

laura@sofre:~/scripts/django/holamundo/encuestas$ ls
__init__.py models.py tests.py views.py

Aquí es donde vivirá nuestra pequeña aplicación.

Ahora editaremos el fichero models.py y pondremos aquí las definiciones de los objetos (recuerdo que python es un lenguaje orientado a objetos), así que tendremos que tener el fichero de esta forma:

from django.db import models

class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField(‘date published’)

class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()

Ahora vamos a activar la aplicación en el proyecto.

Editamos el fichero que hemos editado antes, el settings.py y añadimos la nueva aplicación en el proyecto, de tal forma que quede así

INSTALLED_APPS = (
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.sites’,
‘holamundo.encuestas’,
)

Ahora que django tiene constancia de la existencia de otra aplicación vamos a ejecutar otro comando

$ python manage.py sql encuestas
BEGIN;
CREATE TABLE `encuestas_poll` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`question` varchar(200) NOT NULL,
`pub_date` datetime NOT NULL
)
;
CREATE TABLE `encuestas_choice` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`poll_id` integer NOT NULL,
`choice` varchar(200) NOT NULL,
`votes` integer NOT NULL
)
;
ALTER TABLE `encuestas_choice` ADD CONSTRAINT `poll_id_refs_id_514c78f` FOREIGN KEY (`poll_id`) REFERENCES `encuestas_poll` (`id`);
COMMIT;

Si quieres también puedes ejecutar estos otros comandos:

* python manage.py validate — Checks for any errors in the construction of your models.
* python manage.py sqlcustom polls — Outputs any custom SQL statements (such as table modifications or constraints) that are defined for the application.
* python manage.py sqlclear polls — Outputs the necessary DROP TABLE statements for this app, according to which tables already exist in your database (if any).
* python manage.py sqlindexes polls — Outputs the CREATE INDEX statements for this app.
* python manage.py sqlall polls — A combination of all the SQL from the sql, sqlcustom, and sqlindexes commands.

Ahora vamos a decirle que sincronice la base de datos de nuevo

$ python manage.py syncdb
Creating table encuestas_poll
Creating table encuestas_choice
Installing index for encuestas.Choice model

el syncdb se ejecuta para todas aquellas aplicaciones que tengamos definidas en el proyecto.

Toqueteando la aplicación
primero de todo abriremos una shell de python

$ python manage.py shell
>>>

[continuará… (tengo que leer algo de sintaxis)]

This entry was posted on divendres, octubre 23rd, 2009 at 23:03 and is filed under Programación. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

3 Responses to “arrancando django y primer script”

Elitowngener 18th, 2013 at 20:15

cuando escribo $ python manage.py runserver en la línea de comandos, aparece esto: no se reconoce como un comando interno o externo, programa o archivo por lote ejecutable.
He probado todo y no doy con el fallo, tengo Windows XP y no se si es un problema de compatibilidades, pero la carpeta se m ha creado perfectamente con los archivos necesarios incluido manage.py, y cuando hago las comprobaciones, tanto python como Django están bien instalados.

Si pudierais ayudarme, lo agradecería. un salud

Leave a Response

« »

guy fawkes