"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Semana de creación de una aplicación de blog sencilla

Semana de creación de una aplicación de blog sencilla

Publicado el 2024-07-29
Navegar:728

Week  Creating Simple Blog App

Introducción

Bienvenido de nuevo a mi viaje de creación de una aplicación de blog usando Django sin usar ChatGPT. Esta semana, me concentré en implementar funciones clave para mejorar mi aplicación de blog. Agregué una funcionalidad que permite a los usuarios crear publicaciones, comentar publicaciones y dar me gusta a las publicaciones de otros usuarios.

Aquí hay un desglose detallado de lo que hice:

Crear aplicación de publicaciones Django

python manage.py startapp posts

Diseñando el modelo de publicación

Comencé diseñando el modelo Post. Este modelo almacenará las publicaciones de blog creadas por los usuarios:

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone


class Post(models.Model):
    title = models.CharField(max_length=100)
    description = models.CharField(max_length=200, help_text="Excerpt of the post...")
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    publication_date = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title

Diseñando el modelo de comentarios y me gusta

A continuación, creé también los modelos Comentario y Me gusta para permitir a los usuarios dejar comentarios y dar me gusta en las publicaciones:

class Comment(models.Model):
    post = models.ForeignKey(Post, related_name="comments", on_delete=models.CASCADE)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    content = models.TextField()
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f"Comment by {self.author} on {self.post}"


class Like(models.Model):
    post = models.ForeignKey(Post, related_name="likes", on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f"Like by {self.user} on {self.post}"

Creando vistas

No incluiré las plantillas tampoco. Creé vistas para crear, enumerar todas las publicaciones y mostrar publicaciones individuales:

from django.shortcuts import render, redirect, get_object_or_404
from rest_framework import generics
from django.contrib.auth.decorators import login_required
from .serializer import PostSerializer
from .forms import *
from .models import *

def create_post(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            newPost = form.save(commit=False)
            newPost.author = request.user
            newPost.save()
            return redirect("posts:my-posts")
    else:
        form = PostForm()
    return render(request, "create_post.html", {"form": form, "show_header": True})

@login_required
def myPosts(request):
    '''
    List the user created posts
    '''
    posts = Post.objects.filter(author=request.user)
    return render(request, "posts_list.html", {"posts": posts, "show_header": True})

def postDetails(request, pk):
    '''
    List all posts in the dashboard and display the comments and likes
    '''
    post = get_object_or_404(Post, pk=pk)
    comment = post.comments.all()
    likes = post.likes.count()
    user_has_liked = post.likes.filter(user=request.user).exists()

    if request.method == "POST":
        comment_form = CommentForm(request.POST)
        if comment_form.is_valid():
            comment = comment_form.save(commit=False)
            comment.post = post
            comment.author = request.user
            comment.save()
            return redirect("posts:post-detail", pk=post.pk)
    else:
        comment_form = CommentForm()
    return render(
        request,
        "main_post.html",
        {
            "post": post,
            "comments": comment,
            "comment_form": comment_form,
            "likes": likes,
            "user_has_liked": user_has_liked,
        },
    )

@login_required
def like_post(request, pk):
    '''
    Handle liking posts
    '''
    post = get_object_or_404(Post, pk=pk)
    like, created = Like.objects.get_or_create(post=post, user=request.user)
    if not created:
        like.delete()
    return redirect("posts:post-detail", pk=post.pk)

Lo siguiente es crear urls.py en una aplicación de publicaciones

from django.urls import path
from .views import *

app_name = "posts"

urlpatterns = [
    path("createpost/", create_post, name="create-post"),
    path("post//", postDetails, name="post-detail"),
    path("post//like/", like_post, name="like-post"),
    path("myposts/", myPosts, name="my-posts"),
]

Desafíos y Aprendizajes

Esta semana, encontré desafíos con:

  • Asegurar que el botón Me gusta permita a los usuarios darle Me gusta a una publicación una vez.
  • Creación de envíos de formularios para comentarios dentro de la vista de detalles de la publicación.

A pesar de estos desafíos, aprendí mucho sobre cómo manejar las interacciones de los usuarios y trabajar con el ORM de Django para gestionar las relaciones entre modelos.

Y eso hace que mi aplicación Simple Blog. Consulta mi Github para obtener más detalles y una demostración en vivo de la aplicación.

Metas de la próxima semana

Planeo crear otro proyecto Django para mejorar mis habilidades y conocimientos.

Si tienes alguna idea de cuál es un buen proyecto en el que trabajar o una colaboración en un proyecto de Django, no dudes en dejar un comentario.

¡Estén atentos para más actualizaciones sobre mi viaje!

Declaración de liberación Este artículo se reproduce en: https://dev.to/jjayfabor/week-2-creating-simple-blog-app-ie1?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3