"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Semana de criação de aplicativo de blog simples

Semana de criação de aplicativo de blog simples

Publicado em 2024-07-29
Navegar:397

Week  Creating Simple Blog App

Introdução

Bem-vindo de volta à minha jornada de construção de um aplicativo de blog usando Django sem usar ChatGPT. Esta semana, concentrei-me na implementação de recursos importantes para aprimorar meu aplicativo de blog. Adicionei uma funcionalidade que permite aos usuários criar postagens, comentar postagens e curtir as postagens de outros usuários.

Aqui está uma análise detalhada do que eu fiz:

Criar aplicativo de postagens do Django

python manage.py startapp posts

Projetando o modelo de postagem

Comecei projetando o modelo Post. Este modelo armazenará as postagens do blog criadas pelos usuários:

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

Projetando o modelo de comentários e curtidas

Em seguida, criei também os modelos Comment e Like para permitir que os usuários deixem comentários e likes nas postagens:

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}"

Criando visualizações

Não incluirei os modelos também. Criei visualizações para criar, listar todas as postagens e exibir postagens individuais:

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)

A seguir é a criação de urls.py em um aplicativo de postagens

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"),
]

Desafios e Aprendizados

Esta semana, encontrei desafios com:

  • Garantir que o botão Curtir permita que os usuários curtam uma postagem uma vez.
  • Criando envios de formulário para comentários na visualização de detalhes da postagem.

Apesar desses desafios, aprendi muito sobre como lidar com as interações do usuário e como trabalhar com o ORM do Django para gerenciar relacionamentos entre modelos.

E isso torna meu aplicativo Simple Blog. Verifique meu Github para mais detalhes e uma demonstração ao vivo do aplicativo.

Metas da próxima semana

Pretendo criar outro projeto Django para melhorar minhas habilidades e conhecimentos.

Se você tem alguma ideia do que é um bom projeto para trabalhar ou uma colaboração em um projeto Django, sinta-se à vontade para deixar um comentário.

Fique ligado para mais atualizações sobre minha jornada!

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/jjayfabor/week-2-creating-simple-blog-app-ie1?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3