Django: Estructura de un proyecto y sus archivos

 


Una vez tengamos instalado Django podemos crear nuestro proyecto y nuestra app desde la consola de comando de windows.

Para ver que comandos tiene la consola de django podemos hacer:

django-admin help

img 1-Resultado de ejecutar django-admin help en el cmd.

Estos comandos interactúan con tus aplicaciones, modelos, migraciones, verificaciones de configuración etc.

Para crear un proyecto ejecutamos

django-admin  startproject nombre_de_tu_proyecto

Yo voy a crear un proyecto llamado calculadora. Al ejecutar el comando de arriba nos da como resultado la siguiente estructura de carpetas y archivos.

img 2-estructura de un proyecto django.

Explicación del proyecto calculadora

Django crea una carpeta llamada calculadora(en este caso) dentro de ella vamos a encontrar una carpeta llamada calculadora y un archivo python llamado manage.py. A esto se le llama el root del proyecto. 

manage.py
Este archivo se va encargar de gestionar todo nuestro proyecto (modelos,apps,codigos sql acorde al gestor que usemos, migraciones,servir staticfiles en producción etc). Manage acepta todos los comandos mostrados en la img 1.

calculadora

Tiene 4 archivos 

__init__.py: Este archivo le dice a python que calculadora es un módulo.

wsgi.py: (Interface de puerta de enlace del servidor web)es una convención de llamada simple para que los servidores envían solicitudes a las aplicaciones web creadas en python.

asgi.py: (Interface de puerta de enalce del servidor asíncrono) permite que nuestra aplicación pueda recibir llamadas asíncronas con el servidor. Esta tecnología es el sucesor de wsgi.urls.py: Este archivo es utilizado con las aplicaciones de tu proyecto. En el interior tenemos una variable lista llamada urlpatterns. Esta contiene  path o rutas(lo podes ver de esa forma) que pueden hacer referencia o "apuntantar" a otras archivos urls.py en aplicaciones.

Cada path o ruta tiene una vista. Puede tener un nombre(muy útil cuando trabajas con formularios) y el patrón con el que se vincula la vista.

Una vista es un conjunto de clases y/o funciones que encapsulan la lógica de la petición. Por lo general están declaradas en un archivo llamado views.py tanto en el proyecto como en las aplicaciones.

settings.py: Este archivo contiene la configuración todo tu proyecto, tanto para la etapa de desarrollo como para la etapa de producción. Las variables que traen por defectos son:

  • BASE_DIR: Construye el path de donde se encuentra el archivo settings.py. Esto lo hace de forma dinámica.

  • SECRET_KEY: Es una clave criptográfica única generada por django al ejecutar django-admin startproject. 
    Si este valor es conocido por un atacante, este puede ejecutar código arbitrario y desactivar todas las medidas de seguridad que provee django. Las sesiones, mensajes, el restablecimiento de contraseñas de los usuarios y el uso de la firma criptográfica podrían quedar  comprometidos. Toda tu aplicación web sería vulnerable.

  • DEBUG: En etapa de desarrollo se encarga de mostrar bien detallado donde esta el error. En etapa de producción se encarga de mostrar una página 400. Al sacar el sitio a producción esta variable debe estar puesta en True. Puedes usar el comando check Esto comprobará todas las configuraciones necesarias para sacar el sitio en producción.

  • ALLOWED_HOSTS: Es una lista de cadenas con nombres de dominio/hosts que el sitio puede servir. 

  • INSTALLED_APP: Esta variable es una lista de aplicaciones. Las aplicaciones permiten extender las funcionalidades de tu proyecto y a su vez fomenta la reutilización de código.

  • MIDDLEWARE: Permiten modificar el procesamiento de solicitudes y respuestas de Django. Básicamente son un conjunto de plugins que alteran la entrada y salida de Django.

  • ROOT_URLCONF: Apunta a la ruta URLCONF raíz del proyecto.

  • TEMPLATES: En esta variable se almacena el motor y búsqueda de las plantillas que usara django para la interpretación y carga de la misma.

  • WSGI_APPLICATION: Apunta al archivo wsgi.py el cual tiene un objeto que sera ejecutado por el servidor interno que tiene django.

  • DATABASE: Contiene las configuración de tu base de datos.

  • AUTH_PASSWORD_VALIDATORS: Contiene una lista de validadores de contraseñas tales como la longitud, contraseñas comunes, combinaciones de mayúsculas, minúsculas y símbolos.

  • LANGUAGE_CODE: Representa el código de idioma para la instalación.

  • TIME_ZONE: Representa la zona horaria de la instalación actual. No necesariamente tiene que ver con la zona horaria del servidor.

  • USE_I18N: Especifica si debe utilizar la traducción de Django.

  • USE_L10N:   Especifica si el formato de datos localizado se habilitará de forma predeterminada o no. Django mostrará números y fechas usando el formato de la configuración regional actual.

  • USE_TZ:  Especifica si las fechas y horas reconocerán la zona horaria de forma predeterminada o no. Django puede reconocer las fechas y horas de manera interna.

  • STATIC_URL: Contiene el path de la localización de los archivos estáticos de las aplicaciones.
    Básicamente, tus aplicaciones pueden tener archivos estáticos y vas usar STATIC_URL para decirle a Django donde se encuentran localizadas.

El archivo config tiene muchísimas opciones para configurar un proyecto. La guía de referencia la puedes encontrar en la  documentación oficial de Django .

A medida que vayamos haciendo ejercicios iremos utilizando gran parte de estos archivos y de las configuraciones que provee Django.

Resumen del artículo

  • El comando django-admin startproject crea un proyecto.

  • El comando django-admin help (Windows) lista todos los comandos del archivo manage.py

  • El archivo manage.py contiene comandos que permite gestionar los componentes de nuestro proyecto (modelos,archivos estáticos para servir en producción, migraciones etc).

  • El archivo settings.py contiene la configuración global de nuestro proyecto y la forma en la que van a interactuar y comportarse sus componentes.

  • Una vista no es más que una función o clase que recibe datos los procesa y en base a eso puede renderizar una plantilla o devolver datos.

  • Las urls son paths el cual tienen asociado una función o método. Pueden contener urls que se encuentran en otro archivo, pero siempre termina habiendo la asoción path-función/método.

¡Saludos pro.grammerjrs del mundo!

Comentarios