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.
pip install django 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:
django-admin startproject blog_project
cd blog_project
python manage.py startapp blog 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:
INSTALLED_APPS = [
...
'blog',
] Para configurar la base de datos y aplicar las migraciones necesarias, ejecuta el siguiente comando:
python manage.py migrate 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:
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 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:
python manage.py makemigrations
python manage.py migrate 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.
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'created_at', 'updated_at') 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:
python manage.py createsuperuser http://localhost:8000/admin: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.
post_list:Esta vista obtiene todas las publicaciones ordenadas por fecha de creación y las pasa al template post_list.html.
post_detail:Esta vista obtiene una publicación específica basada en su pk (primary key) y la pasa al template post_detail.html.
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}) 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.
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'),
] 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.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
] templates/blog y añade post_list.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> 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.
<!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> 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.
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'content'] 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.
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}) 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.
<!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> 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.
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
] http://localhost:8000/add/ para agregar una nueva publicación.http://localhost:8000/.Con esto, ya tienes un flujo completo para crear y visualizar publicaciones en Django. 🚀