TL;DR: Aprende a crear una app de encuestas en Django desde cero. Sigue nuestro checklist con pasos detallados para configurar tu proyecto y desarrollar una aplicación funcional.
Crear tu primera aplicación en Django puede parecer desafiante, pero con la guía adecuada, verás que es más sencillo de lo que imaginas. En este artículo, aprenderás cómo crear una app de encuestas paso a paso.

Introducción a Django
Django es un framework de desarrollo web basado en Python que facilita la creación de aplicaciones web seguras, escalables y organizadas. Su estructura sigue el patrón “Modelo-Vista-Plantilla” (MVP):
- Modelo (Model): Define la estructura de datos de tu aplicación y las reglas para acceder a ellos.
- Vista (View): Contiene la lógica que conecta los datos con las plantillas.
- Plantilla (Template): Determina cómo se presentan los datos al usuario.
Checklist 📃
- 🐍 Preparar el entorno: Instalar Python, configurar Visual Studio Code (VSC) y crear un entorno virtual.
- 🛠️ Crear el proyecto Django: Generar la estructura del proyecto con
django-admin startproject. - 📂 Crear la app “polls”: Crear una app para gestionar la funcionalidad de “polls” (encuestas).
- 📊 Definir los modelos: Crear los modelos de datos en
models.pyy aplicar migraciones. - 🔗 Configurar vistas y URLs: Definir las rutas y vistas para la app.
- 🌐 Probar la aplicación: Ejecutar el servidor de desarrollo y verificar que funcione correctamente.
- 🖼️ Usar plantillas en la vista principal: Modificar la vista de inicio para usar plantillas HTML.
- 🔧 Configurar el panel de administración: Habilitar el administrador para gestionar encuestas y opciones.
- 🗳️ Agregar una interfaz de votación: Crear vistas y formularios para que los usuarios puedan votar y ver los resultados.
- 🎨 Crear los templates necesarios: Generar los templates para mostrar las encuestas, opciones y resultados, explicando cómo funcionan.
Paso 1: 🐍 Preparar el entorno
Antes de empezar, asegúrate de tener Python instalado en tu computadora. Descárgalo desde python.org. Durante la instalación, habilita la opción “Add Python to PATH” para que puedas usarlo desde la línea de comandos. Una vez instalado, verifica que esté funcionando con:
python --version

Verifica la instalación con la ventana de comandos o en PowerShell:

Python es el lenguaje que soporta Django, por lo que es esencial tenerlo configurado correctamente. Para escribir y gestionar tu código de manera eficiente, descarga e instala Visual Studio Code (VSC) desde code.visualstudio.com. Configúralo instalando las extensiones Python y Django, que te ayudarán con la sintaxis y sugerencias de código. Esto simplificará mucho el desarrollo de tu proyecto.



Instala las extensiones de Python y Django:


Crea una nueva carpeta vacía (puedes llamarla apps) y ábrela en Visual Studio Code (VSC):

En la terminal de Visual Studio Code (VSC), configura un entorno virtual para aislar las dependencias de tu proyecto:
python -m venv env
source env/bin/activate # En macOS/Linux
env\Scripts\activate # En Windows




Esto creó una nueva carpeta llamada env y activó esta carpeta que representa el entorno virtual.
Instala Django usando:
pip install djangoDjango es el framework que usarás para construir la aplicación.


Paso 2: 🛠️ Crear el proyecto Django
Django organiza tu código en proyectos y apps para mantenerlo modular y ordenado. El proyecto es el contenedor principal de tu aplicación. Ejecuta:
django-admin startproject mi_proyecto
cd mi_proyectoEsto crea una estructura de carpetas que incluye configuraciones esenciales para tu proyecto, como:
settings.py: Configuraciones del proyecto.urls.py: Define las rutas principales.manage.py: Gestión del proyecto, esta será la base de tu aplicación.wsgi.pyyasgi.py: Configuraciones para desplegar tu aplicación.
Esta organización ayuda a mantener tu código modular y escalable.

Paso 3: 📂 Crear la app “polls” (encuestas)
Las apps en Django son componentes reutilizables dentro de un proyecto. Crear una app llamada polls (término en inglés para encuestas) que te permitirá gestionar la funcionalidad relacionada con las encuestas:
python manage.py startapp polls
Luego, registra la app en el archivo settings.py bajo INSTALLED_APPS:
INSTALLED_APPS = [
...,
'polls',
]Esto le indica a Django que la app “polls” forma parte del proyecto “mi_proyecto” y debe ser incluida en las configuraciones generales para poder comunicarse con otros componentes.

Asegúrate de que el ambiente esté activado en la barra inferior de Visual Studio Code:


Paso 4: 📊 Definir los modelos
Los modelos representan la estructura de tus datos y permiten que Django gestione la base de datos por ti. En polls/models.py, define:
Questioncontiene el texto de la pregunta y la fecha de publicación.Choicealmacena las opciones de respuesta y está vinculada aQuestionmediante una relación de “clave externa” (ForeignKey).
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)Para reflejar y aplicar estos cambios en la base de datos, ejecuta:
python manage.py makemigrations
python manage.py migrate


Paso 5: 🔗 Configurar vistas y URLs
Las vistas controlan lo que los usuarios ven al visitar tu app. Por ejemplo, en polls/views.py, agrega una vista simple:
from django.http import HttpResponse
def index(request):
return HttpResponse("Bienvenido a la encuesta.")
Configura las rutas en polls/urls.py para que Django sepa cómo responder a las solicitudes (el archivo urls.py no existe por lo que es necesario crearlo dentro de polls y no confundirlo con el archivo mi_proyecto/urls.py) :
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
path('', views.index, name='index'),
]
Finalmente, enlaza las URLs de la app con las rutas principales del proyecto en mi_proyecto/urls.py:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
Esto organiza el manejo de rutas, haciendo que cada app sea modular y fácil de mantener.
Paso 6: 🌐 Probar la aplicación
Inicia el servidor de desarrollo con:
python manage.py runserver
Django incluye un servidor de desarrollo integrado para probar tu código localmente. Ve a http://127.0.0.1:8000/polls/ en tu navegador (no olvides incluir la ruta definida “/polls/”). Si ves el mensaje “Bienvenido a la encuesta”, tu app está funcionando correctamente.

NOTA: Presiona ctrl + c para detener el servidor.
Paso 7: 🖼️ Usar plantillas en la vista principal
Modificar la vista principal para usar un template HTML con render en lugar de HttpResponse permite separar el código Python de la presentación visual, facilitando su mantenimiento y escalabilidad. Actualiza la vista index:
from django.shortcuts import render
from .models import Question
def index(request):
latest_questions = Question.objects.order_by('-pub_date')[:5]
context = {'latest_questions': latest_questions}
return render(request, 'polls/index.html', context)
Crea la plantilla polls/templates/polls/index.html (crea las carpetas y archivos correspondientes):
<!DOCTYPE html>
<html>
<head>
<title>Encuestas</title>
</head>
<body>
<h1>Encuestas recientes</h1>
<ul>
{% for question in latest_questions %}
<li>{{ question.question_text }}</li>
{% endfor %}
</ul>
</body>
</html>
Vuelve a probar la aplicación. Inicia el servidor con:
python manage.py runserverVe a http://127.0.0.1:8000/polls/ en tu navegador.


Ya no se encuentra el mensaje de “Bienvenido a la encuesta”, en su lugar verás el mensaje “Encuestas recientes” que utiliza la plantilla HTML. Las encuestas recientes están vacías porque todavía no tenemos preguntas ni opciones agregadas a la base de datos. Revisemos en el siguiente paso cómo configurar el panel de administración y utilizarlo para agregar nuevas encuestas.
Paso 8: 🔧 Configurar el panel de administración
Django incluye un panel de administración listo para usar que permite gestionar los modelos de nuestra app. El panel de administración de Django es una herramienta poderosa que permite gestionar los datos de tu aplicación sin necesidad de escribir código adicional. Esta funcionalidad es útil para administrar las encuestas y opciones desde una interfaz gráfica.
Para configurarlo:
- Crea un superusuario: Para acceder al panel de administración, necesitas un usuario con privilegios de administrador. Ejecuta este comando en tu terminal:
python manage.py createsuperuserSigue las instrucciones para ingresar un nombre de usuario, correo electrónico y contraseña.

- Registra los modelos en
polls/admin.pypara que aparezcan en el panel de administración:
from django.contrib import admin
from .models import Question, Choice
admin.site.register(Question)
admin.site.register(Choice)
- Inicia el servidor y accede al panel en http://127.0.0.1:8000/admin/. Usa las credenciales del superusuario para iniciar sesión. Desde aquí, puedes agregar, editar o eliminar preguntas y opciones manualmente. Esto es especialmente útil durante el desarrollo para probar diferentes escenarios.






Presiona “Save and add another”:


Echa un vistazo de nuevo a http://127.0.0.1:8000/polls/. Observa la pregunta que agregaste en el panel de administración.

Vamos a agregar nuevas vistas para ver más detalles y poder votar por las opciones.
Paso 9: 🗳️ Agregar una interfaz de votación y ajustar las URLs
Ahora crearemos una funcionalidad que permita a los usuarios votar en las encuestas y ver los resultados.
detail: Muestra una encuesta con las opciones disponibles.vote: Procesa el voto de un usuario.results: Muestra los resultados de la encuesta.
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponseRedirect
from django.urls import reverse
from .models import Question, Choice
def index(request):
latest_questions = Question.objects.order_by('-pub_date')[:5]
context = {'latest_questions': latest_questions}
return render(request, 'polls/index.html', context)
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/detail.html', {'question': question})
def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
try:
selected_choice = question.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
return render(request, 'polls/detail.html', {
'question': question,
'error_message': "No seleccionaste una opción.",
})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))
def results(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/results.html', {'question': question})
Actualizar las URLs: En polls/urls.py, agrega rutas para estas vistas:
from django.urls import path
from . import views
app_name = 'polls'
urlpatterns = [
path('', views.index, name='index'),
path('<int:question_id>/', views.detail, name='detail'),
path('<int:question_id>/vote/', views.vote, name='vote'),
path('<int:question_id>/results/', views.results, name='results'),
]Paso 10: 🎨 Crear los templates necesarios
Los templates definen cómo se mostrarán las encuestas, opciones y resultados en el navegador.
Modifica la plantilla de index.html en polls/templates/polls:
<!DOCTYPE html>
<html>
<head>
<title>Encuestas</title>
</head>
<body>
<h1>Encuestas recientes</h1>
<ul>
{% for question in latest_questions %}
<li>
<a href="{% url 'polls:detail' question.id %}">
{{ question.question_text }}
</a>
</li>
{% endfor %}
</ul>
</body>
</html>
Crea en polls/templates/polls las plantillas detail.html y results.html:
polls/templates/polls/detail.html:
<!DOCTYPE html>
<html>
<head>
<title>Encuesta</title>
</head>
<body>
<h1>{{ question.question_text }}</h1>
<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
<input type="radio" name="choice" value="{{ choice.id }}">
{{ choice.choice_text }}<br>
{% endfor %}
<button type="submit">Votar</button>
</form>
</body>
</html>
polls/templates/polls/results.html:
<!DOCTYPE html>
<html>
<head>
<title>Resultados</title>
</head>
<body>
<h1>Resultados: {{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{ choice.choice_text }}: {{ choice.votes }} votos</li>
{% endfor %}
</ul>
</body>
</html>
Vuelve a probar la aplicación. Inicia el servidor con:
python manage.py runserverVe a http://127.0.0.1:8000/polls/ en tu navegador.


Da clic en la pregunta



Explicación del flujo de la aplicación
- Inicio: Los usuarios ven las encuestas disponibles en
index.html. - Detalle de encuesta: Los usuarios seleccionan una opción en
detail.html. - Procesamiento del voto: La vista
voteactualiza el conteo de votos en la base de datos. - Resultados: Los usuarios ven los resultados en
results.html.
Esto finaliza tu aplicación, permitiendo a los usuarios interactuar con las encuestas. ¡Felicidades por completar tu proyecto!
#Django #Python #DesarrolloWeb #Encuestas
Cita este artículo
CursoPython.com. (2025). Crear tu primera app en Django: ¡Una Encuesta Paso a Paso! Recuperado de https://cursopython.net/crear-app-django-encuestas

