Este tutorial se enfoca en la integración de modelos de datos y bases de datos en un proyecto Django, partiendo de los desarrollos previos. El objetivo es almacenar información en una base de datos mediante la creación de modelos y visualizarla posteriormente en las páginas web.
1. Asegúrate de tener un entorno virtual activo. Si no lo está, actívalo con el siguiente comando:
pipenv shell
A continuación, crearemos una nueva aplicación llamadaposts para gestionar los anuncios o publicaciones. Este proceso implica la configuración de sus plantillas, vistas y URLs para que la página se muestre correctamente.
2. Inicia la creación de la nueva aplicación posts:
python manage.py startapp posts
3. Registra la nueva aplicación posts en el archivo my_project/settings.py:
INSTALLED_APPS = [
# ... otras apps
'home',
'about',
'posts', # Aplicación añadida
]
4. Crea un archivo de plantilla llamado posts.html dentro del directorio templates y añade el siguiente contenido:
{% extends 'base.html' %}
{% block content %}
<h1>Página de Anuncios</h1>
{% endblock content %}
5. Modifica el archivo posts/views.py para definir la vista:
# posts/views.py
from django.views.generic import TemplateView
class PostsPageView(TemplateView):
template_name = 'posts.html'
6. Configura las URLs:
(1) Crea un archivo urls.py dentro del directorio posts y añade:
# posts/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.PostsPageView.as_view(), name='posts'),
]
(2) Actualiza el archivo principal de URLs my_project/urls.py:
# my_project/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('home.urls')),
path('about/', include('about.urls')),
path('posts/', include('posts.urls')), # Ruta añadida
]
7. Integra un enlace a la nueva página en la barra de navegación modificando base.html:
<!-- Navegación principal -->
<nav class="navbar navbar-expand-sm bg-light">
<div class="container-fluid">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="{% url 'home' %}">Inicio</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'posts' %}">Anuncios</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'about' %}">Acerca de</a>
</li>
</ul>
</div>
</nav>
8. Ejecuta el servidor de desarrollo y verifica que el enlace funciona:
python manage.py runserver
Tras configurar las URLs y plantillas, procederemos a la integración de la base de datos.
9. Define el modelo de datos en posts/models.py:
from django.db import models
class Publication(models.Model):
content = models.TextField()
Este código crea un modelo llamado Publication con un único campo content de tipo TextField. Para más detalles sobre los tipos de datos y campos disponibles en Django, consulta la documentación oficial.
10. Genera los archivos de migración de la base de datos:
python manage.py makemigrations
Este comando creará automáticamente un archivo de migración (por ejemplo, 0001_initial.py) dentro de la carpeta migrations de la aplicación posts, reflejando la estructura del modelo.
11. Aplica las migraciones para crear o actualizar las tablas en la base de datos:
python manage.py migrate
12. Crea un superusuario para acceder al panel de administración:
python manage.py createsuperuser
Se te pedirá que ingreses un nombre de usuario, correo electrónico (opcional) y contarseña. Recuerda la contraseña que elijas, ya que no se mostrará mientras la escribes.
13. Inicia nuevamente el servidor de desarrollo:
python manage.py runserver
14. Accede a la página de administración en http://127.0.0.1:8000/admin e inicia sesión con las credenciales del superusuario creado.
15. Registra el modelo Publication en la interfaz de administración modificando posts/admin.py:
from django.contrib import admin
from .models import Publication
admin.site.register(Publication)
Al refrescar la página de administración, verás la tabla Publication disponible.
16. En la página de administración, haz clic en el botón "+ Add" para crear una o varias publicaciones y guárdalas.
17. Mejora la representación de las publicaciones en el admin. Por defecto, se muestran como "Publication object (1)". Para una mejor legibilidad, modifica posts/models.py y añade el método __str__:
from django.db import models
class Publication(models.Model):
content = models.TextField()
def __str__(self):
return self.content[:50] # Muestra los primeros 50 caracteres
Al refrescar la página de administración, las publicaciones se mostrarán con su contenido truncado.
Ahora, haremos que las publicaciones de la base de datos se muestren en la página posts.html.
18. Actualiza el archivo posts/views.py para usar ListView:
# posts/views.py
from django.views.generic import ListView
from .models import Publication
class PostsPageView(ListView):
model = Publication
template_name = 'posts.html'
context_object_name = 'publications' # Nombre de la variable en la plantilla
19. Modifica el archivo templates/posts.html para iterar sobre las publicaciones:
{% extends 'base.html' %}
{% block content %}
<h1>Página de Anuncios</h1>
<ul>
{% for pub in publications %}
<li>{{ pub }}</li>
{% endfor %}
</ul>
{% endblock content %}
20. Refresca la página de anuncios. Ahora deberías ver las publicaciones extraídas de la base de datos. Añade más entradas en el panel de administración para observar los cambios.