Curso Django

El web framework para perfeccionistas

Desarrollo rápido y limpio basado en Python

Curso Django: Instalación y primera aplicación

Requisitos para su instalación

Django es un framework hecho en Python, por lo tanto se necesita que hayas previamente instalado Python (2.6 o 2.7) y tengas a la mano tu editor de texto favorito. Si no sabes que editores de texto usar, o como instalar Python lee la primera parte de la Guia Python, con esto es suficiente para empezar a trabajar.

Nota: Django y Python 3.0

Django no funciona con Python 3.0 actualmente, debido a incompatibilidades con el intérprete de Python.

Al estar hecho en Python, sería bueno tener en cuenta la sintaxis y fundamentos de este lenguaje, así que si aún no lo sabes y quieres reforzar tus conocimientos, revisa la guía de Python primero antes de continuar con esta, o da un vistazo a este video de mejorando.la

Obtener Django

Para obtener Django se puede:

  • Descargar la versión estable oficial más reciente, desde el sitio oficial de Django y descomprimir el archivo, debe aparecer una carpeta con el nombre de Django seguido del número de la versión bajada. (Para esta guía usaremos la versión 1.4)
  • Obtener la versión de desarrollo desde el repositorio de Django, para ello se debe usar Subversión, de esta manera:
    svn co http://code.djangoproject.com/svn/django/trunk/

    Una vez que se ha obtenido Django, es momento de instalarlo.

Python y las variables de entorno en Windows

Los usuarios de Windows deben asegurarse de tener Python dentro de las variables de entorno, esto servirá para poder instalar Django y usarlo fácilmente. Si no sabes como hacerlo, mira el siguiente vídeo:

Instalar Django

Una vez que se descomprime el archivo descargado, debemos acceder a la carpeta desde una terminal o ventana de comandos (en caso de los usuarios de Windows). Suponiendo que la versión que elegimos es la 1.4, se tendría que digitar:

 cd Django-1.4

Ya en la carpeta de instalación de Django, se debe digitar la siguiente instrucción: (Debes de tener permisos de administrador)

 python setup.py install

Si usas Ubuntu GNU/Linux, sería algo así:

sudo python setup.py install

Listo eso es todo, ya tienes Django instalado. Si se desea mayor información de como instalarlo o quizás algunas otras opciones, siempre está la documentación del mismo proyecto para guiarnos. Aquí pueden encontrar la Guía completa de instalación de Django.

Si usas OS X Lion, quizás lo más recomendado sería instalar Django usando pip:
Primero, debemos tener Setup Tools para instalarlo, lo descargamos, lo descomprimimos y dentro del directorio (via el terminal)

 sudo python setup.py install 

Una vez con Setup Tools instalado usamos pip:

 sudo pip install Django 

Primer proyecto

Antes de empezar es bueno aclarar que la versión que vamos a utilizar en esta guía es la más reciente (1.4), y varias cosas han cambiado, la información que podrían encontrar en Internet probablemente se encuentre desactualizada.

Para crear nuestro primer proyecto, abrimos una terminal (o ventana de comandos si asi lo conoces en windows), nos ubicamos en la carpeta en donde queremos crear nuestro proyecto y digitamos:

django-admin.py startproject recetario

Esta instrucción creará dos directorios con el nombre del proyecto (en este caso: recetario) y 5 archivos distribuidos de la siguiente manera:

  • manage.py
  • recetario
    • __init__.py
    • settings.py
    • urls.py
    • wsgi.py

Para ver que el proyecto está funcionando en la terminal debemos escribir:

python manage.py runserver

Al ejecutar esa instrucción debemos visualizar un resultado como el siguiente:

python manage.py runserver

python manage.py runserver

Abrimos el navegador web la dirección http://127.0.0.1:8000/ y debemos ver lo siguiente:

Django http://127.0.0.1:8000

Django http://127.0.0.1:8000

Ya tenemos nuestro proyecto creado. :)

En el caso de que nos salga un error porque el puerto asignado esta en uso como la siguiente imagen:

Django en puertos en uso

Django en puertos en uso

sólo debemos indicar que puerto usaremos para lanzar el servicio, por ejemplo si se desea usar el puerto 8888 entonces se tendría que digitar:

python manage.py runserver 8888

Usaríamos la dirección http://127.0.0.1:8888/ y tendríamos como resultado lo siguiente:

Django en un puerto 8888

Django en un puerto 8888

Cada proyecto necesita de aplicaciones donde se puedan gestionar los modelos y las vistas. Un proyecto puede tener muchas aplicaciones:

Primera aplicación

Para crear nuestra primer aplicación, desde la terminal y en la carpeta del proyecto, debemos digitar:

python manage.py startapp principal

Esto creará un directorio y cuatro archivos más, lo que nos dejaría con una estructura de archivos como esta:

  • manage.py
  • recetario
    • __init__.py
    • settings.py
    • urls.py
    • wsgi.py
  • principal
    • __init__.py
    • models.py
    • test.py
    • views.py

El poderoso settings.py

Una parte muy importante del proyecto es el archivo settings.py, este archivo permite configurar la conexión a la base de datos, la zona horaria, el idioma, los directorios principales del proyecto, las aplicaciones del proyecto, entre otras cosas.

Aprender a configurar este archivo permite optimizar el funcionamiento del proyecto, veremos las instrucciones principales a configurar:

Codificación de caracteres

Nuestro idioma esta lleno de caracteres especiales como las tildes y las eñes que son las más comunes, la primera sugerencia para manejar esto eficientemente en django debemos agregar la siguiente línea al archivo settings.py

#encoding:utf-8

Ruta del proyecto

Una configuración importante es configurar la ruta del proyecto, esto permitirá lanzar la aplicación desde cualquier directorio y mover el proyecto a cualquier computador con Django instalado. Para ello debemos escribir las siguientes líneas en el archivo settings.py:

# Identificando la ruta del proyecto
import os
RUTA_PROYECTO = os.path.dirname(os.path.realpath(__file__))

Ruta del proyecto

Si no se configura la ruta del proyecto, cada vez que se cambia de directorio o de PC, se tendrá que cambiar las rutas de las plantillas, archivos estáticos y directorio de subida de contenido de los usuarios.

Administradores

Cuando Django tiene la opción de DEBUG=False, las notificaciones de error de código deben ser enviadas vía correo electrónico a los administradores, junto con
los detalles completos del error. Para poner los datos de los administradores debemos buscar la siguiente porción:

ADMINS = (
    # ('Your Name', '[email protected]'),
)

Y modificarla para que quede con los nombres de los administradores en forma de tupla, en mi caso lo dejaré así:

ADMINS = (
    ('Sergio Infante Montero', '[email protected]'),
)

Configuración de la base de datos

También podemos configurar la conexión a la base de datos según nuestras necesidades, Django soporta de manera predeterminada la conexión con postgresql, mysql, sqlite3 y oracle. En nuestro proyecto usaremos sqlite3.

Debemos buscar la siguiente sección del archivo:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': '',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

Y dejarla de la siguiente manera:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'recetario.db',          # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

Zona Horaria

Django permite configurar la zona horaria del proyecto, la lista de zonas horarias disponibles se pueden encontrar en la wikipedia. Para configurar debemos buscar lo siguiente:

TIME_ZONE = 'America/Chicago'

Yo lo configurare en la zona horaria de Lima/Perú, así que lo modificare de esta forma:

TIME_ZONE = 'America/Lima'

Configuración del idioma

Django también permite configurar el idioma que usará de manera predeterminada para su funcionamiento, para configurar esto debemos buscar lo siguiente:

LANGUAGE_CODE = 'en-us'

Se puede consultar la lista de idiomas disponibles para adecuarlo a nuestras necesidades, yo lo configurare como español de Perú:

LANGUAGE_CODE = 'es-PE'

Aplicaciones instaladas

Un proyecto en Django necesita de aplicaciones, algunas ya vienen configuradas de manera predeterminada. En nuestro proyecto usaremos la aplicación de administración y su documentación, estas ya vienen construidas, y también nuestra primera aplicación creada líneas arriba, llamada principal. Para habilitar estas aplicaciones debemos buscar la siguiente sección que se encuentra casi al final del archivo settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

Y modificarlas de la siguiente manera:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'principal',
)

Otras opciones de settings.py

Existen otras configuraciones que iremos modificando durante el desarrollo del curso, como el directorio de plantillas, el contenido estático, los archivos cargados por los usuarios, entre otras. Por ahora con estas instrucciones tenemos lo básico para continuar con nuestro proyecto.

Creación de la base de datos

Hasta el momento no se ha creado la base de datos o las tablas predeterminadas del proyecto, solo se ha configurado los parametros de conexión. Para crear la base de datos, debemos digitar desde la terminal o ventana de comandos, la siguiente instrucción (recordar que debemos estar en la carpeta de proyecto para que todo se realice correctamente):

python manage.py syncdb

Esta instrucción deberá mostrar el siguiente resultado:

python manage.py syncdb

python manage.py syncdb

Hay una pregunta que debemos responder, se refiere a la creación de un superusuario (un administrador del proyecto), para lo cual respondemos: yes (en caso de responder negativamente, no podremos usar inmediatamente el administrador predeterminado de Django). Luego de ello completamos la información que nos solicita.

Django creación del super usuario

Django creación del super usuario

Al finalizar ya estará creada la base de datos, como en este proyecto se usara sqlite3, debera aparecer un archivo nuevo llamado recetario.db, este contiene las tablas y los datos iniciales del proyecto.

Las direcciones URL del proyecto

Para poder visualizar los cambios que hicimos y la interfaz administrativa de Django, aún falta modificar un archivo mas, este es: urls.py (recordar que este archivo se encuentra dentro del directorio recetario). Este archivo contiene lo siguiente:

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'recetario.views.home', name='home'),
    # url(r'^recetario/', include('recetario.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
)

Debemos dejarlo de esta manera:

from django.conf.urls import patterns, include, url
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

Ejecución del proyecto

Una vez que tenemos todo listo y configurado, debemos nuevamente iniciar el servidor de desarrollo que tiene el proyecto. Ya hicimos esto al principio, solo debemos digitar desde la terminal nuevamente (dentro del directorio del proyecto):

python manage.py runserver

Lucirá de esta manera:

Django 404 predeterminado

Django 404 predeterminado

Nos muestra un error 404, luego veremos el por qué. Para ingresar a la interfaz administrativa que ya viene construida con Django, ingresaremos a la dirección: http://127.0.0.1:8000/admin, en donde debemos poner el nombre del superusuario y su respectiva contraseña, creados anteriormente (líneas arriba) con la opción syncdb.

Django admin login

Django admin login

Si todo fue correcto debemos visualizar la interfaz administrativa:

Interfaz administrativa predeterminada de Django

Interfaz administrativa predeterminada de Django

Nuestro primer proyecto ya se encuentra configurado para continuar con la construcción de los modelos. Sin embargo antes de ello debemos entender como funciona Django, ese será nuestro próximo capítulo: Entendiendo como trabaja Django.

Repositorio del proyecto

El proyecto se encuentra en github por si te perdiste de algo y deseas ver algún archivo del mismo.

Hasta la próxima semana :)

Siguiente capítulo: Entendiendo como trabaja Django

Sergio Infante MonteroSergio Infante Montero para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo

Síguenos en: Twitter @maestros | Facebook Fan page

119 comentarios

Comentarios

Páginas: [1] 2 »

  1. Muy explicado….andaba esperando este magnifico curso…….seguiré al pie de la letra para entender perfectamente…….gracias—

  2. lV

    gracias por empezar este curso … lo estaba esperando …
    para los que usan ArchLinux se instala fácilmente con “sudo pacman -S django” …

  3. Muy cool , lo seguiré al detalle!!!

  4. Aurora Medina

    Muy interesante y útil sobre todo porque ayuda no solo a personas del medio si no a los que somos de otras áreas que nos gusta la programación como en mi caso :)

  5. Arturo

    Muchas gracias por compartir conocimiento, justo lo que un novato busca mucha claridad y simpleza en esta guía y voy a seguirla.
    Saludos.

  6. Gustavo SANTIAGO

    mmm muy bien, pero no deja de ser complejo elaborar soluciones de este modo, me gusta mucho más web2py ! Saludos

    1. Son perspectivas distintas web2py nació en el ambito académico, Django nació en el ambito de desarrollo real. Cuestiones de gusto también al final de todo es Python :)

    2. Son perspectivas distintas web2py nació en el ambito académico, Django nació en el ámbito de desarrollo real. Cuestiones de gusto también al final de todo es Python :)

    3. Jheison

      Muy cierto, vi un poco de web2py pero sinceramente tiene limitaciones, por lo que leí y por comentarios que escuché de fuentes confiables pues Django es mucho más configurable que web2py además con Django se saca mejores resultados en proyectos grandes; una excelente guía, la seguiré al pie de la letra :) .

  7. Joel

    Muy bueno y detallado ta chebre el curso estare esperandola proxima clase

  8. Josias

    Hola que tal, tengo este error a la hora de configurar la base de datos:

    ~/trunk/recetario $ python manage.py syncdb
    Traceback (most recent call last):
    File “manage.py”, line 10, in
    execute_from_command_line(sys.argv)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 442, in execute_from_command_line
    utility.execute()
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 381, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/base.py”, line 195, in run_from_argv
    self.execute(*args, **options.__dict__)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/base.py”, line 231, in execute
    output = self.handle(*args, **options)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/base.py”, line 371, in handle
    return self.handle_noargs(**options)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/commands/syncdb.py”, line 57, in handle_noargs
    cursor = connection.cursor()
    File “/usr/local/lib/python2.7/dist-packages/django/db/backends/dummy/base.py”, line 15, in complain
    raise ImproperlyConfigured(“settings.DATABASES is improperly configured. ”
    django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

    la configuracion de la base de datos esta de la siguiente forma:

    DATABASES = {
    ‘default’: {
    ‘ENGINE’: ‘django.db.backends.mysql’,
    ‘NAME’: ‘recetario.db’,
    ‘USER’: ‘root’,
    ‘PASSWORD’: ”,
    ‘HOST’: ”,
    ‘PORT’: ”,
    }
    }

    De antemano, gracias por la ayuda.

    1. Felipe

      El error que tienes es en el nombre de la base de datos, sino me equivoco creaste una llamada “recetario” y no “recetario.db”, la extension “.db” solo debes añadirla si estas usando sqlite3 quitale el .db al nombre y todo debería funcionar bien

    2. Roberto Urita

      Pues tu configuración esta mal en estas dos lineas
      ‘ENGINE’: ‘django.db.backends.mysql’,
      ‘NAME’: ‘recetario.db’,

      debes cambiarlas por estas….

      ‘ENGINE’: ‘django.db.backends.sqlite3′, # Add ‘postgresql_psycopg2′, ‘mysql’, ‘sqlite3′ or ‘oracle’.
      ‘NAME’: ‘recetario.db’, # Or path to database file if us

      En ningun lugar del capitulo dice que utilizaremos mysql. Claramente nos comenta @neosergio que estaremos trabajando con sqlite3 en esta guía.
      Esto pasa por no leer bien.

    3. Yo pienso seguir la guia con mysql, ya que los cambios en el settings son minimos, y el tipo de DB no va a impactar en como se armen los Modelos mas adelante…es lo bonito de django “le es indiferente la base de datos” :) . Sqlite3 esta bueno pero me resulta lento :(

    4. Estimado Josias, verifica bien que hayas guardo el archivo, porqué ese error sale por sintaxis mal escrita, si fuera base de datos, te daría otro tipo de error (sin permisos o que no existe la base de datos), si sigues teniendo problemas, podemos usar teamviewer para solucionarlo, mandame un DM por Twitter.

  9. glisandro

    Tenia ganas de ver Django así que me pareció una buena oportunidad para no tener que andar dando vueltas por distinos.

    En media hora hice los pasos sin problemas :)

    Gracias y hasta la semana q viene !

  10. Primero que todo, Gracias por compartir su conocimiento, contribuyes con el mejoramiento de internet, lei partes del capitulo, lo leeré en la noche con mas detenimiento, tengo una pregunta, yo trabajo con wamp, utilizando php y mysql, la instalación me podría generar algún conflicto?

    Gracias por su colaboración

    1. No deberia causare ningun problema, ya que al correr python manage.py runserver estas corriendo un mini servidor de pruebas (ajeno al apache que tienes en tu wamp).
      En el peor de los casos si tu apache usa el puerto 8000 como django….solo cambia el puerto de django por eje python manage.py runserver 7000 (o el nro que se ocurra) y ya… :)

  11. Roberto

    Esta madre es orgasmico…. solo hacer esto y el administrador, el panel de usuarios, grupos y sitios. Ver que ya esta hecho y cambiar la contraseña, y que funciones…. Esto realmente es excelente….. ya estoy ansioso por ver el próximo capitulo y todos los que siguen.

    Saludos

  12. Felipe

    Muy buen capitulo, tengo poco tiempo utilizando django y algo que he encontrado tremendamente util es crear entornos de trabajo con virtualenv y en ellos instalar django y aplicaciones de terceros lo que permite un mejor control sobre el projecto, una de estas aplicaciones que recomiento es south que permite crear migraciones como en rails ojala en los siguiente capitulos puedas explicar algo de esta aplicacion que definitivamente te facilita el trabajar con la base de datos

    1. Gracias por el curso, muy sencillo y práctico. Está muy bien que lo hayáis basado en la nueva versión de Django, de este modo los que ya hemos tocado un poquito Django podemos ver las diferencias con la 1.3.

      Como sugerencia, una de las partes que pueden resultar más interesantes para el uso a nivel profesional de Django es lo referente a la depuración. ¿Vais a incluir contenido al respecto en el curso?.

      Por favor Felipe, ¿podrías poner un ejemplo de utilización de Virtualenv para crear un entorno de trabajo o poner algún vínculo con información básica de inicio de esta herramienta?.

      Totalmente de acuerdo respecto al uso de South, es indispensable utilizarlo en los proyectos de Django. El comando python manage.py syncdb sólo crea las tablas, cuando modificas los modelos no actualiza la BD. South aunque en determinados escenarios tiene sus detalles es muy útil para realizar modificaciones posteriores a la creación inicial de los modelos.

      Gracias y un saludo.

    2. Si virtualenv y algunos complementos ayudan muchisimo al trabajo con Django, el problema es que no los he considerado en los capítulos iniciales ya que hay muchos de los que leen este material, que son novatos y hablarles de esos conceptos probablemente haga que sientan que es complejo. Sin embargo mi intención es seguir escribiendo sobre Django en Maestros, así que esos temas si están contemplados para un futuro.

  13. ivan

    Una duda porque tengo los archivos urls.py, settings.py y __init__.py en el directorio recetario (donde estan los archivos recetario.db y manage.py)

  14. Excelente todo esta funcionando ok esperando con ansias proximo capitulo

  15. Manuel Zambrano

    Muy cool, voy a estar al pendiente del curso…

  16. Genial!!!!!

  17. hugo castañeda

    excelente tutorial ya lo realice pero intente correr los archivos del repositorio http://neosergio.github.com/recetario_mdw/ y me sale error cuando ejecuto en el manager.py

    C:\recetario>python manage.py runserver
    Traceback (most recent call last):
    File “manage.py”, line 10, in
    execute_from_command_line(sys.argv)
    File “C:\Python27\lib\site-packages\django\core\management\__init__.py”, line
    429, in execute_from_command_line
    utility.execute()
    File “C:\Python27\lib\site-packages\django\core\management\__init__.py”, line
    379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    File “C:\Python27\lib\site-packages\django\core\management\__init__.py”, line
    252, in fetch_command
    app_name = get_commands()[subcommand]
    File “C:\Python27\lib\site-packages\django\core\management\__init__.py”, line
    101, in get_commands
    apps = settings.INSTALLED_APPS
    File “C:\Python27\lib\site-packages\django\utils\functional.py”, line 276, in
    __getattr__
    self._setup()
    File “C:\Python27\lib\site-packages\django\conf\__init__.py”, line 42, in _set
    up
    self._wrapped = Settings(settings_module)
    File “C:\Python27\lib\site-packages\django\conf\__init__.py”, line 139, in __i
    nit__
    logging_config_func(self.LOGGING)
    File “C:\Python27\lib\logging\config.py”, line 777, in dictConfig
    dictConfigClass(config).configure()
    File “C:\Python27\lib\logging\config.py”, line 562, in configure
    ‘filter %r: %s’ % (name, e))
    ValueError: Unable to configure filter ‘require_debug_false’: Cannot resolve ‘dj
    ango.utils.log.RequireDebugFalse’: No module named RequireDebugFalse

    C:\recetario>

    1. Asegurate de tener instaladas las variables de entorno para Windows, o de tener la versión 1.4 de Django. Ese error es por la falta de un modulo, o porqué no encuentra el enlace correcto.

    2. ya solucionaste el problema??, porque a mi me sucede lo mismo :( ¿que hago?

  18. Gracias!, muy bueno.

  19. Jorge Armando

    excelente todo muy claro y detallado, tengo una duda es pero me colaboren es que yo tengo instalado en ubuntu la versión 1.3.1 de Django, y deseo tener la versión mas actual en la cual estará basa este curso, por lo que pregunto si no habrá algún conflicto si instalo la version 1.4 de django como lo explican en este capitulo, soy novato en ubuntu aclaro..

    1. Debes de desinstalar primero la versión anterior para no causar conflictos con las bibliotecas

  20. Ricky

    Hola Sergio,
    Instalé y probé correctamente Python pero tengo un problema con Django (al parecer tampoco tuve problemas con la instalacion de este Framework). Lo que ocurre es cuando quiero crear el proyecto me aparece el siguiente error y quisiera saber como solventarlo:
    ” “django-admin.py” no se reconoce como un programa o archivo por lotes ejecutable.”

    Qué estóy haciendo mal?
    Pd. Las variables de entorno las configuré bien.

    1. Ricky

      Me respondo yo mismo, busqué como loco en la documentación de Django y encontré que tambien era necesario definir como variable de entorno la ruta al archivo django-admin.py que en mi caso estaba en C:\Python27\Scripts. Creé entonces la variable de entorno y funcionó!!! :-D

      Seguimos (brb)

  21. alejandro

    me sale un error en al momento de correr la base de datos que estará mal?

    pollito@ServicioAlCliente:~/django_d/recetario$ python manage.py syncdb
    Traceback (most recent call last):
    File “manage.py”, line 10, in
    execute_from_command_line(sys.argv)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 443, in execute_from_command_line
    utility.execute()
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/base.py”, line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/base.py”, line 232, in execute
    output = self.handle(*args, **options)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/base.py”, line 371, in handle
    return self.handle_noargs(**options)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/commands/syncdb.py”, line 57, in handle_noargs
    cursor = connection.cursor()
    File “/usr/local/lib/python2.7/dist-packages/django/db/backends/dummy/base.py”, line 15, in complain
    raise ImproperlyConfigured(“settings.DATABASES is improperly configured. ”
    django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

    my settings lo tengo así

    DATABASES = {
    ‘default’: {
    ‘ENGINE’: ‘django.db.backends.sqlite3′, # Add ‘postgresql_psycopg2′, ‘mysql’, ‘sqlite3′ or ‘oracle’.
    ‘NAME’: ‘recetario.db’, # Or path to database file if using sqlite3.
    ‘USER’: ”, # Not used with sqlite3.
    ‘PASSWORD’: ”, # Not used with sqlite3.
    ‘HOST’: ”, # Set to empty string for localhost. Not used with sqlite3.
    ‘PORT’: ”, # Set to empty string for default. Not used with sqlite3.
    }
    }

    1. Solucionado gracias a Teamviewer, un problema de duplicación de archivos. Si alguién tiene problemas y no pueden continuar siganme (twitter.com/neosergio) para coordinar una sesión con teamviewer y ver el problema específico :)

  22. Claudia

    excelente curso!! justo para personas como yo que recién se inician en django!! esperando con ansias el próximo capítulo

  23. Alex Neyra

    Les recomiendo leer djangobook aunque no esta actualizado a mi me ha ayudado mucho xD http://www.djangobook.com/en/2.0/

    1. Hay que tener cuidado con el djangobook ya que muchisimas cosas han cambiado y si se sigue al pie de la letra lo único que causara es confusión. Afortunadamente se esta preparando un libro para http://pragprog.com con lo más actualizado y similar al djangobook

    2. Alex Neyra

      Gracias por el consejo, mientras tanto leeré la documentación de django hasta que se publique el libro —————-

  24. Tengo el mismo problema que Alejandro (31) pero yo en mi caso tengo el archivo “settings.py” de esta forma:

    DATABASES = {
    ‘default’: {
    ‘ENGINE’: ‘django.db.backends.’, # Add ‘postgresql_psycopg2′, ‘mysql’, ‘sqlite3′ or ‘oracle’.
    ‘NAME’: ‘recetario.db’, # Or path to database file if using sqlite3.
    ‘USER’: ”, # Not used with sqlite3.
    ‘PASSWORD’: ”, # Not used with sqlite3.
    ‘HOST’: ”, # Set to empty string for localhost. Not used with sqlite3.
    ‘PORT’: ”, # Set to empty string for default. Not used with sqlite3.
    }
    }

    1. alejandro

      checa tu databases es diferente al mio

    2. Te falta indicarle a Django que gestor de BD vas a usar, para el curso sqlite3

    3. Ya ví el error, como bien dices Sergio me faltaba la declaración de la base de datos, cuando la introduci, sin ningún tipo de problemas, gracias, a la espera del siguiente artículo pena que sea una vez a la semana…

  25. kevin

    Muy buen curso, se lo agradezco bastante.

  26. Marcos

    La verdad muy bueno. Es impresionante lo que se puede hacer con Django.

  27. Excelente. Hace un mes que empecé a estudiar este framework por mi cuenta y tiene muchísimo potencial, de hecho ya me he embarcado en un proyecto de e-commerce. Os seguiré leyendo a ver que puedo aprender y mejorar. Gracias por compartir, así da gusto aprender. ;-)

  28. Veo que ahora en Django 1.4 los apps pueden ir al lado de la carpeta del proyecto, esto me hace sentir que la carpeta del proyecto se separa y solo debe contener la “configuración” sin apps dentro de ella

    ¿Esa es la forma correcta de hacerlo?

    1. En la versión 1.4 cambia el orden de las carpetas, y lo hace con el objetivo de hacer que los proyectos crezcan facilmente. Este cambio hizo que esta guía fuera reescrita completamente, e incluso retrase nuestras publicaciones, que ya las teniamos en planificación desde marzo.

    2. Genial, me gusto mas asi, Sergio un excelente articulo, gracias por tu dedicación, espero con ansias el segundo capitulo

      Saludos desde Colombia

  29. Edgar

    Muy Bueno funcionando de maravilla.

  30. El aviso de “contenido publicado originalmente….” no me deja ver bien las entradas de codigo :/

    1. ¿A que te refieres? Las entradas de código todas son en texto plano. Si puedes ser más específico podría ayudarte a resolver la molestia que tienes

  31. Muy buen curso, excelentemente explicado a detalle se agradece este tipo de aporte y estoy en espera del siguiente capitulo.

    Saludos

  32. Ricardo

    Esta muy bueno el curso, muy bien explicado en espera del siguiente capitulo. Saludos!!!

  33. Jefferson Esquea Sanchez

    tengo una duda

    tengo instalado la versión 1.3.1 de Django, y deseo tener la versión mas actual en la cual estará basa este curso, pero no se como desinstalarlo para poder intalar la version 1.4. ojala me puedan ayudar..

    1. Dependiendo la distribución que tengas, la ubicación de los archivos es distinta. Te puedo ayudar a través de teamviewer, mandame un DM por Twitter para poder ayudarte.

  34. Hmmm yo recomendaria que lo hicieran todo en entorno linux, correrlo en windows aveces trae muchos problemas

    1. El curso está orientado para los tres sistemas operativos más usados: GNU/Linux, OS X y Windows. No hay problema por seguir el curso en cualquiera de estos sistemas. Django se ejecuta bien en todos ellos, el asunto es saber como desplegarlo, el uso de los sistemas operativos es cuestión de gusto o costumbre. En producción definitivamente se recomienda un sistema operativo Tipo Unix.

    2. bueno yo definitivamente uso django en linux, en windows me trae demasiados problemas !! sin contar que windows ya es un problema !! Yo tengo instalado los dos :3 pero definitivamente prefiero linux

  35. smatht

    Como puedo ver la primer publicación?

    1. Estas comentando la primera publicación, por si te refieres a la publicación de presentación de la guía el enlace es el siguiente: http://www.maestrosdelweb.com/editorial/curso-django-introduccion/

  36. Daniel L

    En primer lugar me gustaría felicitarte por este capitulo, me a parecido realmente interesante y bien explicado.

    Tengo una duda sobre el curso, ¿Enseñaras como llevar un proyecto Django a un entorno de producción?.

    Saludos.

    1. Creo que este curso de las pautas de como puede crear y manejar un projecto en django. Osea crear el projecto y asi mismo crear y modificar las aplicaciones dentro de este. El entorno en que trabajamos es el mismo framework !!

    2. Muchas gracias por las felicitaciones, ahora con respecto al entorno de producción y tal y como está planteado en la presentación de la guía (http://www.maestrosdelweb.com/editorial/curso-django-introduccion/), el despliegue en producción lo veremos en el capítulo 10.

  37. He llevado ya leyendo 5 tutoriasl y documentacion y nunca era tan explicado como aca, te paseste Sergio I. M te salio genial voy a estar siguiendote, quizas tenga algunas preguntas en las que puedas ayudar para mi aplicacion y que soluciones me podrias dar para eso. por mientras seguire ansioso al siguiente tema :3

    1. Muchas gracias :) . Puedes seguirme por Twitter para preguntas más específicas.

  38. Mis felicitaciones Sergio. Nunca había usado Django, soy completamente nuevo en esto, y fui capaz de llegar hasta el final en no mucho tiempo. Me surgió un pequeño problema, pero que conseguí solucionar casi al instante.

    Esperando el siguiente capítulo. ¡Saludos!

    1. Estupendo, cualquier duda me mandas un DM por Twitter :)

    2. Gracias de nuevo, tener un soporte tan directo me vendrá genial en caso de quedarme atascado.

  39. Ariel

    Hola, estoy intando conectar la aplicación con una base mysql, pero obtengo un error al hacer el “syncdb”.

    Mi configuración en el settings.py es:
    ‘default’: {
    ‘ENGINE’: ‘django.db.backends.mysql’, # Add ‘postgresql_psycopg2′, ‘mysql’, ‘sqlite3′ or ‘oracle’.
    ‘NAME’: ‘test’, # Or path to database file if using sqlite3.
    ‘USER’: ‘root’, # Not used with sqlite3.
    ‘PASSWORD’: ”, # Not used with sqlite3.
    ‘HOST’: ”, # Set to empty string for localhost. Not used with sqlite3.
    ‘PORT’: ”, # Set to empty string for default. Not used with sqlite3.
    }

    No tengo ninguna contraseña setteada para acceder a mysql, así que ese no es el problema.
    El error que me sale es el siguiente (coloco solo la parte que a mi parecer es importante, si eso no ayuda, colocaré todo el error, pero prefiero evitar llenar todo con la página con el error :P ) :

    raise ImproperlyConfigured(“Error loading MySQLdb module: %s” % e)
    django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

    Pareciera como que tengo que agregar el módulo MySQLdb, es cierto? Me puedes dar una mano?

    Gracias

    1. Para usar Mysql con Python necesitas tener instalado MySQLdb

    2. Ariel

      No logro instalar correctamente MySQLdb, alguien que me pueda dar una mano? MP por favor.

      Aclaro, uso Ubuntu 12.04

    3. Ariel

      Me olvidé de aclarar: mi problema cuando intento instalar mySQLdb es que me dice que no encuentra “mysql_config”

  40. Ariel

    Lo logré! Luego de estar un buen rato buscando por internet encontré la solución, la publico aquí para que no les pase lo mismo a los demás.

    Para los que quieran utilizar python con mysql en ubuntu, deberán instalar mysqldb como bien dijeron.
    Los pasos que yo seguí y me funcionaron son:
    1) Descargar el paquete python-mysql de: http://sourceforge.net/projects/mysql-python/
    2) sudo python setup.py install (dentro del paquete descargado)
    3) Si el paso anterior les tiró error diciendo que no encuentra mysql_config, deberán hacer lo siguiente:
    4) Correr el siguiente comando en consola: sudo apt-get install libmysqlclient-dev python2.7-dev (cuidado con la versión de python)
    5) Entrar a la carpeta descargada en el punto 1, y editar el archivo “site.cfg”, y buscar la siguiente línea:
    #mysql_config = /usr/bin/mysql_config
    Descomentarla (sacarle el “#”) y cambiar la dirección por donde tengan el mysql_config.
    6) Listo, ahora si, vuelven a realizar el punto 2 y ya debería funcionar.

    A mi eso me anduvo correctamente, espero poder haber ayudado a alguien.

    Saludos.

    1. Otra manera quizas mucho mas simple es hacer un: sudo apt-get install python-mysqldb

  41. andresvato

    Buena iniciativa este curso .. pero tengo el siguiente problema. Al ejecutar la linea de comando en DOS con la linea: python setup.py install — me aparece un mensaje y dice: Este archivo no tiene ningún programa asociado para realizar esta acción.Instale el programa que corresponda, o si ya lo tiene instalado,cree una asociación en el panel de control de programas predeterminados….. // cual seria el paso a seguir mucha gracias por la ayuda de antemano.. : D

    1. No viste el video de las variables de entorno con Windows, dale un tiempo, encontraras la respuesta a tu problema

  42. Lucia

    Hola tengo Windows 7 y cuando doy la orden

    django-admin.py startproject recetario me da error “django-admin.py” no se reconoce como un comando interno o externo, comando o archivo por lotes ejecutable

    eso es un error por el tema de los paths? yo tengo a Python en el Path y funciona bien

    otra duda, puedo seguir este tutorial pero ejecutando el proyecto en Eclipse con Django ya instalado?

    Gracias!

    1. No solo necesitas que Python se encuentre dentro de los path, también es necesario incluir la carpeta de scripts por lo general debe estar en un directorio C:\Python27\Scripts. Con respecto a usar Eclipse adelante, los archivos en Python pueden ser editados con tu herramienta favorita.

  43. Ariel

    Hola, recién estuve probando rehacer todo pero con SQLlite3, y sobre el final, cuando corro el servidor, entro a miurl/admin/, me logueo, y me sale un cartel, que dice:

    Administración de DJango
    Administración de Sitio
    No tiene permiso para editar nada.

    Osea, ya con la interfaz del admin de django.

    Por qué será? alguna idea?

    1. Ariel

      Ah, me había olvidado de “descomentar” la linea de admin.autodiscover()
      Ahora anda correctamente.

  44. Hola, Que ventajas tiene instalar el framework en Phyton

    1. Bueno la ventaja es una esquema de trabajo ya predefinido, dentro de cual puedes crear aplicaciones ya con un estructura que facilita la modificacion de estas, ademas que trabaja bajo un lenguaje de alto nivel cuya caracteristica es de ser un lenguaje interpretado cuya funcion es asimilar la sintexis de codigo mas natural al hombres y de manera eficiente. Aparte de trabajar con el concepto DRY , Don’t Repeat Yourself !! que facilita un codigo legible, limpio facil de entender y otras cosas mas !.
      Yo Adoro pyhon y ruby. son mis lenguajes favoritos

    2. La ventaja mas notoria es la rapidez con la cual se construyen aplicaciones y lo ordenado que puede ser.

  45. Joseph

    Hay alguan forma o tutorial o guia de referencia para la instalacion de django + python + mysql (o similar) + nginx en un servidor de recursos minimos(256 mb ram)

    gracias por el tutorial :D

    Joseph

    1. Tan específico como eso, quizas si buscas en stackoverflow puedes encontrar, o si te suscribes a las listas de correo de Django

  46. jbaak

    Excelente el curso, muy bien explicado y facil de entender, se agradece el conocimiento compartido!

    saludos

  47. juan

    muy bueno el curso. gracias por compartirlo..

    tengo una duda en cuanto al configurar el settings.py . respecto a la ruta del proyecto

    donde coloco esta variable RUTA_PROYECTO = os.path.dirname(os.path.realpath(__file__))

    gracias esta genial……..

    1. En las primeras líneas, no te olvides de importar el os

  48. juan

    esto esta genial gracias sergio por hacer este curso. estare esperando los proximos capitulos.

    gracias

  49. francisco

    olas a todos… recien estoy iniciando en Django, lo instale y trate de configurarlo, pero cuando escribo la linea de comando:

    python manage.py syncdb me sale el siguiente error:

    Traceback (most recent call last):
    File “manage.py”, line 10, in
    execute_from_command_line(sys.argv)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 442, in execute_from_command_line
    utility.execute()
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 381, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 252, in fetch_command
    app_name = get_commands()[subcommand]
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 101, in get_commands
    apps = settings.INSTALLED_APPS
    File “/usr/local/lib/python2.7/dist-packages/django/utils/functional.py”, line 184, in inner
    self._setup()
    File “/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py”, line 43, in _setup
    self._wrapped = Settings(settings_module)
    File “/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py”, line 93, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
    File “/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py”, line 35, in import_module
    __import__(name)
    File “/home/francisco/ProyDjango/recetario/recetario/settings.py”, line 3
    /home/francisco/ProyDjango/Recetario = os.path.dirname(os.path.realpath(__file__))
    ^
    SyntaxError: invalid syntax
    francisco@hpFrancisco:~/ProyDjango/recetario$ python manage.py syncdb
    Traceback (most recent call last):
    File “manage.py”, line 10, in
    execute_from_command_line(sys.argv)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 442, in execute_from_command_line
    utility.execute()
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 381, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 252, in fetch_command
    app_name = get_commands()[subcommand]
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 101, in get_commands
    apps = settings.INSTALLED_APPS
    File “/usr/local/lib/python2.7/dist-packages/django/utils/functional.py”, line 184, in inner
    self._setup()
    File “/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py”, line 43, in _setup
    self._wrapped = Settings(settings_module)
    File “/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py”, line 93, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
    File “/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py”, line 35, in import_module
    __import__(name)
    File “/home/francisco/ProyDjango/recetario/recetario/settings.py”, line 3
    /home/francisco/ProyDjango/Recetario = os.path.dirname(os.path.realpath(__file__))
    ^
    SyntaxError: invalid syntax
    francisco@hpFrancisco:~/ProyDjango/recetario$ clear

    francisco@hpFrancisco:~/ProyDjango/recetario$ python manage.py syncdb
    Traceback (most recent call last):
    File “manage.py”, line 10, in
    execute_from_command_line(sys.argv)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 442, in execute_from_command_line
    utility.execute()
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 381, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 252, in fetch_command
    app_name = get_commands()[subcommand]
    File “/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py”, line 101, in get_commands
    apps = settings.INSTALLED_APPS
    File “/usr/local/lib/python2.7/dist-packages/django/utils/functional.py”, line 184, in inner
    self._setup()
    File “/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py”, line 43, in _setup
    self._wrapped = Settings(settings_module)
    File “/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py”, line 93, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
    File “/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py”, line 35, in import_module
    __import__(name)
    File “/home/francisco/ProyDjango/recetario/recetario/settings.py”, line 3
    /home/francisco/ProyDjango/Recetario = os.path.dirname(os.path.realpath(__file__))
    ^
    SyntaxError: invalid syntax
    ————-

    por favor espero me ayuden… gracias

    1. Es por error de sintaxis, date una vuelta por el repositorio del proyecto, para que compruebes de que el archivo settings.py es igual al que tienes, repositorio (http://neosergio.github.com/recetario_mdw)

  50. Exelente, muy sencillo para arrancar, y nada aburrido ;) Gracias

  51. cristian_cena

    estos son tutoriales!! transmisión de conocimiento 100% efectiva, aprendí, lo pude hacer!! muchas gracias.

    1. Estupendo que te haya servido :)

  52. jose david

    no puedo hacer el syncdb estoy haciendo el ejercici con postgres y luego intente con mysql y creo que no me funciona porque no tengo instalados ls paquetes para pythn de postgres y mysql ya los descargue pero no se como instalarlos….. alguien me ayuda . gracias.

  53. Fernando

    Hola Sergio,

    Al ejecutar el servidor no me deja importar patterns nose porque me sale este error

    cannot import name patterns

    Request Method: GET
    Request URL: http://127.0.0.1:8888/
    Django Version: 1.3.1
    Exception Type: ImportError
    Exception Value:

    cannot import name patterns

    Exception Location: /home/review/bin/recetario/../recetario/urls.py in , line 1
    Python Executable: /usr/bin/python
    Python Version: 2.6.8
    Python Path:

    ['/home/review/bin/recetario',
    '/usr/local/lib/python2.6/site-packages/setuptools-0.6c12dev_r88846-py2.6.egg',
    '/usr/local/lib/python2.6/site-packages/python_memcached-1.48-py2.6.egg',
    '/usr/local/lib/python2.6/site-packages/ReviewBoard-1.6.9-py2.6.egg',
    '/usr/local/lib/python2.6/site-packages/recaptcha_client-1.0.6-py2.6.egg',
    '/usr/local/lib/python2.6/site-packages/pytz-2012c-py2.6.egg',
    '/usr/local/lib/python2.6/site-packages/python_dateutil-1.5-py2.6.egg',
    '/usr/local/lib/python2.6/site-packages/paramiko-1.7.7.2-py2.6.egg',
    '/usr/local/lib/python2.6/site-packages/flup-1.0.3.dev_20110405-py2.6.egg',
    '/usr/local/lib/python2.6/site-packages/Pygments-1.5-py2.6.egg',
    '/usr/local/lib/python2.6/site-packages/Djblets-0.6.19-py2.6.egg',
    '/usr/local/lib/python2.6/site-packages/django_evolution-0.6.7-py2.6.egg',
    '/usr/local/lib/python2.6/site-packages/Django-1.3.1-py2.6.egg',
    '/usr/lib/python26.zip',
    '/usr/lib/python2.6',
    '/usr/lib/python2.6/plat-linux2',
    '/usr/lib/python2.6/lib-tk',
    '/usr/lib/python2.6/lib-old',
    '/usr/lib/python2.6/lib-dynload',
    '/usr/lib/python2.6/site-packages',
    '/usr/lib/python2.6/site-packages/Numeric',
    '/usr/lib/python2.6/site-packages/PIL',
    '/usr/local/lib/python2.6/site-packages',
    '/usr/lib/python2.6/site-packages/gtk-2.0']

    Server time:

Los comentarios de este post están cerrados. Si quieres seguir la discusión, debatir, criticar, sugerir o expandir el tema te invitamos a hacerlo en tu propio blog, en twitter o donde puedas publicar. No olvides enlazar a este post para que sigamos la conversación y se genere un trackback.