Un programador errante en busca de la sabiduría...

Instalar y configurar Django 3.0

Para instalar django debemos saber como usar una terminal y tener python3 con pip, si no sabes de que hablamos ve primero al enlace citado para que aprendas a instalar python y pip desde la terminal. También seria bueno que te des una vuelta por aquí para aprender a usar virtualenv

Instalar Django

Esto es sumamente fácil, abre una terminal y escribe pip install django, esto nos instalara django y nos creara el comando django-admin.

pip install django==3.*
# si estas en linux tal vez requieras ejecutarlo con sudo
sudo pip install django==3.*

La importante diferencia entre un proyecto y una aplicación

django-admin nos da dos comandos muy utiles, startapp y startproject que crean una aplicación y un proyecto respectivamente. Un proyecto es un conjunto de aplicaciones y una aplicación es una cosa que algo.

En otras palabras, el proyecto puede ser una sitio web como este (ronin2.ninja) que como dato curioso esta hecho con django. Y las aplicaciones son las cosas que tiene el sitio web, por ejemplo un blog, una sección de encuestas y un foro. Cada una de esas funcionalidades es una app.

Por lo que es importante recalcar como nombrar de forma correcta a un proyecto de Django. La forma incorrecta seria nombrarlo con su funcionalidad, por ejemplo llamarlo blog seria incorrecto. Lo mas correcto es nombrarlo con el nombre del proyecto, si el website se llama ronin2ninja, ese debe ser el nombre del proyecto. Sin embargo un nombre mas genérico como "project" o "website" puede ser mejor. Mas adelante explicaremos el por que.

Crear el proyecto y su estructura

El comando startproject nos creara una serie de carpetas y archivos con el nombre que le pasemos.

django-admin startproject website

Estas carpetas son la estructura del proyecto y se ven algo así:

website/  # carpeta del proyecto que puede tener cualquier nombre
    manage.py # programa de django que nos ayuda a hacer cosas
    website/ # carpeta de la configuración del proyecto.
        __init__.py 
        asgi.py
        settings.py  # configuracion del proyecto
        urls.py # map de urls del proyecto
        wsgi.py

Django nos crea una carpeta con el nombre del proyecto dentro de otra con el mismo nombre, esto puede ser confuso y hace muchos años no era así, antes de la versión 1.4 el settings estaba a la altura del manage.py y django solo creaba una carpeta. Pero por como funciona python esto no era optimo y manage.py tenia bugs que solo podían resolverse si se movía a un directorio arriba.

Crear una app

Ya tenemos el proyecto de nuestro wensite, ahora hay que crear la primer app. Digamos que nuestro sitio web requiere un blog, por lo que necesitamos una app que cubra esta función. Existen ya varias que pueden importarse con pip, sin embargo crear un blog es absurdamente fácil como para no hacerlo a mano.

# entramos a la carpeta que contiene el manage.py
cd website
# creamos una app
python manage.py startapp blog
# tambien puede funcionar
./manage.py startapp blog

Esto nos agregara una carpeta al proyecto con varios archivos de python

website/  
    manage.py 
    blog/ # carpeta de la app
        __init__.py
        admin.py  
        apps.py
        models.py # aqui van los modelos
        views.py  # aquí van las vistas
    website/ 
        __init__.py 
        asgi.py
        settings.py  
        urls.py
        wsgi.py

Los modelos son clases de python que se conectan a la base de datos para guardar y leer información, mientras que las vistas son clases de python que reciben una petición del usuario y procesan una respuesta.

Toqueteando el settings

Al settings de django de le faltan unas lineas por defecto que necesitamos añadirle por que se usan en el 99% de los proyectos.

primero en installed apps hay que añadir nuestras aplicaciones

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
        'blog' # <---- aquí
]

luego la base de datos la toqueteamos así:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'db_name', # <-- no olvides cambiar esto
        'USER': 'user_name',  # <-- no olvides cambiar esto
        'PASSWORD': '******',  # <-- no olvides cambiar esto
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

Podríamos usar la base de datos sqllite3 que django trae por defecto, pero siempre terminaremos cambiándola, por lo que mejor hacerlo de una vez. Django funciona excelente con postgresql, puedes ver como correr Postgresql con docker por aquí Algunos degenerados les gusta correr django con mysql o con mariadb, por favor no seas de esos locos. Claro que django puede correr con esas bases de datos. pero no hay motivo para querer hacer eso.

Lo siguiente es para que django sirva archivos en la ruta /static/. Queremos esto para que nos sirva el css y algunas imágenes por ejemplo.

STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")
]

Por ultimo seria conveniente agregar esto para que nuestro proyecto pueda manejar imágenes y otros archivos subidos por el usuario. Esto es solo para que funcione en local, para poner en producción necesitaremos hacer cambios en el settings.

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, "media")

Toqueteando las urls

Como parte necesaria para que django sirva las imágenes y archivos de estilo hay que añadir un par de lineas en el archivo urls.py

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [ ... ]

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL)
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)

Lo que ocurre es que django no es bueno sirviendo imágenes y otros archivos, por lo que en producción querremos que esto sea servido por nginx o apache. pero por practicidad en desarrollo nos va bien que django se encargue de esto.


Ultima revisión:



Usamos cookies. Leer más