Creación de una Aplicación Básica de Encuestas

DjangoDjangoBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este tutorial, lo guiaremos en la creación de una aplicación básica de encuestas.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL django(("Django")) -.-> django/CoreConfigurationandRoutingGroup(["Core Configuration and Routing"]) django(("Django")) -.-> django/DatabaseModelsandMigrationsGroup(["Database, Models, and Migrations"]) django(("Django")) -.-> django/DevelopmentandAdministrationToolsGroup(["Development and Administration Tools"]) django/CoreConfigurationandRoutingGroup -.-> django/django_urls("Django Urls") django/DatabaseModelsandMigrationsGroup -.-> django/request_and_response("Request and Response") django/DevelopmentandAdministrationToolsGroup -.-> django/contrib_packages("Contrib Packages") subgraph Lab Skills django/django_urls -.-> lab-153741{{"Creación de una Aplicación Básica de Encuestas"}} django/request_and_response -.-> lab-153741{{"Creación de una Aplicación Básica de Encuestas"}} django/contrib_packages -.-> lab-153741{{"Creación de una Aplicación Básica de Encuestas"}} end

Resumen

Vamos a aprender por ejemplo.

A lo largo de este tutorial, lo guiaremos en la creación de una aplicación básica de encuestas.

Consistirá en dos partes:

  • Un sitio público que permite a las personas ver las encuestas y votar en ellas.
  • Un sitio de administración que te permite agregar, cambiar y eliminar encuestas.

Asumiremos que ya tienes Django instalado. Puedes comprobar si Django está instalado y qué versión tiene ejecutando el siguiente comando en un terminal:

python -m django --version

Si Django está instalado, deberías ver la versión de tu instalación. Si no lo está, recibirás un error que dice "No module named django".

Este tutorial está escrito para Django, que admite Python 3.10 y versiones posteriores. Si la versión de Django no coincide, puedes consultar el tutorial para tu versión de Django utilizando el selector de versiones en la esquina inferior derecha de esta página, o actualizar Django a la última versión.

Creando un proyecto

Si es la primera vez que utilizas Django, tendrás que hacer una configuración inicial. Es decir, necesitarás generar automáticamente un código que establece un proyecto de Django, una colección de configuraciones para una instancia de Django, que incluye la configuración de la base de datos, opciones específicas de Django y configuraciones específicas de la aplicación.

Desde la línea de comandos, cd a un directorio donde desees almacenar tu código, luego ejecuta el siguiente comando:

cd ~/project
django-admin startproject mysite

Esto creará un directorio mysite en tu directorio actual.

Veamos lo que creó startproject:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

Estos archivos son:

  • El directorio raíz externo mysite/ es un contenedor para tu proyecto. Su nombre no importa para Django; puedes renombrarlo como desees.
  • manage.py: Una utilidad de línea de comandos que te permite interactuar con este proyecto de Django de varias maneras.
  • El directorio interno mysite/ es el paquete de Python real para tu proyecto. Su nombre es el nombre del paquete de Python que necesitarás utilizar para importar cualquier cosa dentro de él (por ejemplo, mysite.urls).
  • mysite/__init__.py: Un archivo vacío que le dice a Python que este directorio debe considerarse un paquete de Python.
  • mysite/settings.py: Configuraciones/Configuración para este proyecto de Django.
  • mysite/urls.py: Las declaraciones de URL para este proyecto de Django; una "tabla de contenidos" de tu sitio basado en Django.
  • mysite/asgi.py: Un punto de entrada para servidores web compatibles con ASGI para servir tu proyecto.
  • mysite/wsgi.py: Un punto de entrada para servidores web compatibles con WSGI para servir tu proyecto.

El servidor de desarrollo

Vamos a verificar que tu proyecto de Django funcione. Cambia al directorio externo mysite, si aún no lo has hecho, y ejecuta los siguientes comandos:

cd ~/project/mysite
python manage.py runserver

Verás la siguiente salida en la línea de comandos:

Realizando comprobaciones del sistema...

La comprobación del sistema no identificó ningún problema (0 silenciados).

Tienes migraciones pendientes de aplicar; tu aplicación puede no funcionar correctamente hasta que se apliquen. Ejecuta 'python manage.py migrate' para aplicarlas.

- 15:50:53 Versión de Django, utilizando las configuraciones'mysite.settings' Iniciando el servidor de desarrollo en <http://127.0.0.1:8000/> Salir del servidor con CONTROL-C.

Ignora la advertencia sobre migraciones de base de datos no aplicadas por ahora; ocuparemos la base de datos en breve.

Has iniciado el servidor de desarrollo de Django, un servidor web ligero escrito puramente en Python. Lo hemos incluido con Django para que puedas desarrollar cosas rápidamente, sin tener que preocuparte por configurar un servidor de producción, como Apache, hasta que estés listo para la producción.

Ahora es un buen momento para señalar: no uses este servidor en ningún entorno que se asemeje a un entorno de producción. Está destinado solo para uso durante el desarrollo. (Estamos en el negocio de hacer marcos de web, no servidores web.)

Ahora que el servidor está en ejecución, visita http://127.0.0.1:8000/ con tu navegador web. O, ejecuta curl 127.0.0.1:8000 en la terminal. Verás una página "¡Felicitaciones!", con un cohete despegando. ¡Funcionó!

En la VM de LabEx, debemos agregar el dominio de LabEx a ALLOWED_HOSTS. Edita mysite/settings.py y agrega * al final de ALLOWED_HOSTS, de modo que se vea así:

ALLOWED_HOSTS = ["*"]

Esto le dice a Django que está permitido atender solicitudes con cualquier encabezado de host.

Servidor de desarrollo de Django en ejecución

Cambiando el puerto

Por defecto, el comando runserver inicia el servidor de desarrollo en la dirección IP interna en el puerto 8000.

Si quieres cambiar el puerto del servidor, pásalo como argumento de línea de comandos. Por ejemplo, este comando inicia el servidor en el puerto 8080:

python manage.py runserver 8080

Si quieres cambiar la IP del servidor, pásala junto con el puerto. Por ejemplo, para escuchar en todas las IP públicas disponibles (lo que es útil si estás ejecutando Vagrant o quieres mostrar tu trabajo en otros computadores de la red), utiliza:

python manage.py runserver 0.0.0.0:8080

Ahora, cambia a la pestaña Web 8080 en la VM de LabEx y verás la misma página "¡Felicitaciones".

Página del servidor de desarrollo de Django

La documentación completa del servidor de desarrollo se puede encontrar en la referencia de runserver.

Recarga automática de runserver
El servidor de desarrollo recarga automáticamente el código de Python según sea necesario para cada solicitud. No es necesario reiniciar el servidor para que los cambios de código surtan efecto. Sin embargo, algunas acciones como agregar archivos no desencadenan un reinicio, por lo que tendrás que reiniciar el servidor en estos casos.

Creando la aplicación de encuestas

Ahora que tu entorno, es decir, un "proyecto", está configurado, ya estás listo para comenzar a trabajar.

Cada aplicación que escribas en Django consiste en un paquete de Python que sigue cierta convención. Django viene con una utilidad que genera automáticamente la estructura básica de directorios de una aplicación, de modo que puedas centrarte en escribir código en lugar de crear directorios.

Proyectos vs. aplicaciones
¿Cuál es la diferencia entre un proyecto y una aplicación? Una aplicación es una aplicación web que hace algo, por ejemplo, un sistema de blogs, una base de datos de registros públicos o una pequeña aplicación de encuestas. Un proyecto es una colección de configuraciones y aplicaciones para un sitio web en particular. Un proyecto puede contener múltiples aplicaciones. Una aplicación puede estar en múltiples proyectos.

Tus aplicaciones pueden estar ubicadas en cualquier lugar de tu ruta de Python <tut-searchpath>. En este tutorial, crearemos nuestra aplicación de encuestas en el mismo directorio que tu archivo manage.py para que se pueda importar como su propio módulo de nivel superior, en lugar de un submódulo de mysite.

Para crear tu aplicación, asegúrate de estar en el mismo directorio que manage.py y escribe este comando:

cd ~/project/mysite
python manage.py startapp polls

Eso creará un directorio polls, que está estructurado de la siguiente manera:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

Esta estructura de directorios albergará la aplicación de encuestas.

Escribe tu primera vista

Vamos a escribir la primera vista. Abre el archivo polls/views.py y pon el siguiente código de Python en él:

from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

Esta es la vista más simple posible en Django. Para llamar a la vista, necesitamos mapearla a una URL, y para esto necesitamos una configuración de URL (URLconf).

Para crear una URLconf en el directorio de polls, crea un archivo llamado urls.py. Tu directorio de aplicación ahora debería verse así:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

En el archivo polls/urls.py, incluye el siguiente código:

from django.urls import path

from. import views

urlpatterns = [
    path("", views.index, name="index"),
]

El siguiente paso es apuntar la URLconf principal al módulo polls.urls. En mysite/urls.py, agrega una importación para django.urls.include e inserta un ~django.urls.include en la lista urlpatterns, de modo que tengas:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path("polls/", include("polls.urls")),
    path("admin/", admin.site.urls),
]

La función ~django.urls.include permite referenciar otras configuraciones de URL. Siempre que Django encuentra ~django.urls.include, corta cualquier parte de la URL que haya coincidido hasta ese punto y envía el resto de la cadena a la configuración de URL incluida para su procesamiento adicional.

La idea detrás de ~django.urls.include es facilitar la inserción y reproducción de URLs. Dado que las encuestas están en su propia configuración de URL (polls/urls.py), pueden ubicarse bajo "/polls/", o bajo "/fun_polls/", o bajo "/content/polls/", o cualquier otro directorio raíz, y la aplicación todavía funcionará.

Cuando usar ~django.urls.include()
Siempre debes usar include() cuando incluyas otros patrones de URL. admin.site.urls es la única excepción a esto.

Ahora has conectado una vista index a la URLconf. Verifica que está funcionando con el siguiente comando:

python manage.py runserver 0.0.0.0:8080

Ve a <http:///polls/> en tu navegador, y deberías ver el texto "Hello, world. You're at the polls index.", que definiste en la vista index.

Estructura de la URLconf de Django

La función ~django.urls.path se le pasa cuatro argumentos, dos obligatorios: route y view, y dos opcionales: kwargs y name. En este momento, vale la pena revisar para qué sirven estos argumentos.

Argumento de ~django.urls.path: route

route es una cadena que contiene un patrón de URL. Al procesar una solicitud, Django comienza con el primer patrón en urlpatterns y recorre la lista, comparando la URL solicitada con cada patrón hasta encontrar uno que coincida.

Los patrones no buscan parámetros GET y POST, ni el nombre de dominio. Por ejemplo, en una solicitud a https://www.example.com/myapp/, la URLconf buscará myapp/. En una solicitud a https://www.example.com/myapp/?page=3, la URLconf también buscará myapp/.

Argumento de ~django.urls.path: view

Cuando Django encuentra un patrón que coincide, llama a la función de vista especificada con un objeto ~django.http.HttpRequest como primer argumento y cualquier valor "capturado" de la ruta como argumentos de palabras clave. Daremos un ejemplo de esto más adelante.

Argumento de ~django.urls.path: kwargs

Se pueden pasar argumentos de palabras clave arbitrarios en un diccionario a la vista destino. No vamos a usar esta característica de Django en el tutorial.

Argumento de ~django.urls.path: name

Dar un nombre a tu URL te permite referirte a ella de manera inambigua desde otros lugares en Django, especialmente desde dentro de plantillas. Esta característica poderosa te permite hacer cambios globales en los patrones de URL de tu proyecto mientras solo modificas un solo archivo.

Resumen

¡Felicitaciones! Has completado el laboratorio de Creación de una Aplicación Básica de Encuestas. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.