Crear un Blog en Django Paso a Paso

Crear un blog en Django es una tarea muy común, pues aprender los fundamentos de Django a través de este tipo de proyectos te permite comprender conceptos clave como el enrutamiento, la gestión de modelos y la interacción con bases de datos, todo mientras construyes una aplicación funcional.

Configuración inicial

1Instala Django:
bash
pip install django
2Crea un nuevo proyecto y aplicación:

Para comenzar con tu proyecto en Django, primero debes crear un nuevo proyecto y luego una nueva aplicación dentro de él. Ejecuta los siguientes comandos en tu terminal:

bash
django-admin startproject blog_project
cd blog_project
python manage.py startapp blog
3Registra la aplicación en settings.py:

Para que Django reconozca la aplicación blog, debes agregarla a la lista INSTALLED_APPS en el archivo settings.py de tu proyecto. Asegúrate de incluir la aplicación de la siguiente manera:

python
INSTALLED_APPS = [
  ...
  'blog',
]
4Configura la base de datos y aplica migraciones:

Para configurar la base de datos y aplicar las migraciones necesarias, ejecuta el siguiente comando:

bash
python manage.py migrate

Crear el modelo de publicación


1Define el modelo en models.py:

El modelo Post se define en el archivo models.py para representar una publicación en la base de datos. Este modelo incluye los siguientes campos:

python
from django.db import models

class Post(models.Model):
  title = models.CharField(max_length=200)
  content = models.TextField()
  created_at = models.DateTimeField(auto_now_add=True)
  updated_at = models.DateTimeField(auto_now=True)

  def __str__(self):
      return self.title
2Aplica migraciones:

Después de definir tus modelos, es necesario aplicar las migraciones para que Django cree las tablas correspondientes en la base de datos. Usa los siguientes comandos:

bash
python manage.py makemigrations
python manage.py migrate

Configurar el panel de administración


1Registra el modelo en admin.py

Para poder gestionar las publicaciones desde el panel de administración de Django, debes registrar el modelo Post en el archivo admin.py. Esto hará que el modelo sea accesible desde el panel de administración.

python
from django.contrib import admin
from .models import Post

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
  list_display = ('title', 'created_at', 'updated_at')
2Crea un superusuario:

Para poder acceder al panel de administración de Django, necesitas crear un superusuario. Esto te permitirá iniciar sesión con privilegios de administrador.

Ejecuta el siguiente comando en la terminal:

bash
python manage.py createsuperuser
3Accede al panel de administración en http://localhost:8000/admin

Crear vistas y URLs


1Define las vistas en views.py

Las vistas en Django gestionan las solicitudes y devuelven las respuestas correspondientes. En este caso, definimos dos vistas para listar las publicaciones y ver los detalles de una publicación específica.

Vista post_list:

Esta vista obtiene todas las publicaciones ordenadas por fecha de creación y las pasa al template post_list.html.

Vista post_detail:

Esta vista obtiene una publicación específica basada en su pk (primary key) y la pasa al template post_detail.html.

python
from django.shortcuts import render, get_object_or_404
from .models import Post

def post_list(request):
  posts = Post.objects.all().order_by('-created_at')
  return render(request, 'blog/post_list.html', {'posts': posts})

def post_detail(request, pk):
  post = get_object_or_404(Post, pk=pk)
  return render(request, 'blog/post_detail.html', {'post': post})
2Configura las URLs en urls.py de la aplicación:

El archivo urls.py de la aplicación define las rutas específicas que serán gestionadas por las vistas. Es aquí donde se conectan las URL con las funciones o clases que procesan las solicitudes del usuario.

python
from django.urls import path
from . import views

urlpatterns = [
  path('', views.post_list, name='post_list'),
  path('<int:pk>/', views.post_detail, name='post_detail'),
]
3Incluye las URLs de la aplicación en el proyecto principal:

Incluir las URLs de la aplicación en el archivo urls.py del proyecto principal permite integrar las rutas de la aplicación con el sistema de enrutamiento global del proyecto. Esto asegura que las páginas de la aplicación sean accesibles desde el navegador.

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

urlpatterns = [
  path('admin/', admin.site.urls),
  path('', include('blog.urls')),
]

Diseñar las plantillas


1Crea un directorio templates/blog y añade post_list.html:
html
<!DOCTYPE html>
<html>
<head>
  <title>Blog</title>
</head>
<body>
  <h1>Blog</h1>
  <ul>
      {% for post in posts %}
      <li><a href="{{ post.id }}/">{{ post.title }}</a></li>
      {% endfor %}
  </ul>
</body>
</html>
2Crea post_detail.html:

El archivo post_detail.html define la estructura HTML para mostrar los detalles de una publicación específica. Este archivo utiliza el motor de plantillas de Django para renderizar dinámicamente los datos del objeto post.

html
<!DOCTYPE html>
<html>
<head>
  <title>{{ post.title }}</title>
</head>
<body>
  <h1>{{ post.title }}</h1>
  <p>{{ post.content }}</p>
  <small>Publicado el {{ post.created_at }}</small>
</body>
</html>

Implementar la funcionalidad de agregar publicaciones


1 Crea un formulario en forms.py:

El archivo forms.py se utiliza para definir formularios basados en los modelos de la aplicación. Esto simplifica la creación de formularios vinculados directamente a los campos de los modelos.

python
from django import forms
from .models import Post

class PostForm(forms.ModelForm):
  class Meta:
      model = Post
      fields = ['title', 'content']
2Crea una vista para agregar publicaciones:

La vista add_post permite crear nuevas publicaciones utilizando el formulario definido previamente. Maneja tanto la visualización del formulario vacío como el procesamiento de los datos enviados por el usuario.

python
from django.shortcuts import redirect

def add_post(request):
  if request.method == 'POST':
      form = PostForm(request.POST)
      if form.is_valid():
          form.save()
          return redirect('post_list')
  else:
      form = PostForm()
  return render(request, 'blog/add_post.html', {'form': form})
3Añade el template add_post.html:

El archivo add_post.html define la estructura HTML para mostrar el formulario de creación de publicaciones en la interfaz. Este template utiliza etiquetas del motor de plantillas de Django para manejar la seguridad y renderizar dinámicamente los campos del formulario.

html
<!DOCTYPE html>
<html>
<head>
  <title>Agregar Publicación</title>
</head>
<body>
  <h1>Agregar Publicación</h1>
  <form method="post">
      {% csrf_token %}
      {{ form.as_p }}
      <button type="submit">Guardar</button>
  </form>
</body>
</html>
4Configurar la URL para agregar publicaciones:

Para habilitar la funcionalidad de agregar publicaciones, define una ruta en el archivo urls.py de tu aplicación. Esta ruta conecta la URL /add/ con la vista add_post.

python
from django.urls import path
from . import views

urlpatterns = [
  path('add/', views.add_post, name='add_post'),
  path('', views.post_list, name='post_list'),  # Ruta para listar publicaciones
]
  Pruebas finales

  • Ejecuta el servidor con python manage.py runserver.
  • Visita http://localhost:8000/add/ para agregar una nueva publicación.
  • Verifica que la nueva publicación aparece en la lista en http://localhost:8000/.

Con esto, ya tienes un flujo completo para crear y visualizar publicaciones en Django. 🚀