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.
python manage.py startapp posts
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
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}"
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)
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"), ]
Esta semana, encontré desafíos con:
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.
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!
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