주 간단한 블로그 앱 만들기

王林
풀어 주다: 2024-07-26 11:16:23
원래의
492명이 탐색했습니다.

Week  Creating Simple Blog App

소개

ChatGPT를 사용하지 않고 Django를 사용하여 블로그 앱을 구축하는 여정에 다시 오신 것을 환영합니다. 이번 주에는 블로그 앱을 개선하기 위한 주요 기능을 구현하는 데 중점을 두었습니다. 사용자가 게시물을 작성하고, 게시물에 댓글을 달고, 다른 사용자의 게시물에 좋아요를 표시할 수 있는 기능을 추가했습니다.

제가 수행한 작업에 대한 자세한 내용은 다음과 같습니다.

Django 게시물 앱 만들기

python manage.py startapp posts
로그인 후 복사

포스트 모델 디자인

저는 Post 모델을 디자인하는 것부터 시작했습니다. 이 모델은 사용자가 만든 블로그 게시물을 저장합니다.

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
로그인 후 복사

댓글과 좋아요 모델 디자인

다음으로 사용자가 게시물에 댓글과 좋아요를 남길 수 있도록 댓글 및 좋아요 모델도 만들었습니다.

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}"
로그인 후 복사

뷰 생성

템플릿도 포함하지 않겠습니다. 모든 게시물을 작성하고 나열하고 개별 게시물을 표시하기 위한 뷰를 만들었습니다.

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)
로그인 후 복사

다음은 포스트 앱에서 urls.py를 생성하는 것입니다

from django.urls import path
from .views import *

app_name = "posts"

urlpatterns = [
    path("createpost/", create_post, name="create-post"),
    path("post/<int:pk>/", postDetails, name="post-detail"),
    path("post/<int:pk>/like/", like_post, name="like-post"),
    path("myposts/", myPosts, name="my-posts"),
]
로그인 후 복사

도전과 배움

이번 주에는 다음과 같은 문제에 직면했습니다.

  • 좋아요 버튼을 사용하면 사용자가 게시물에 한 번 좋아요를 표시할 수 있습니다.
  • 게시물 세부정보 보기 내 댓글에 대한 제출 양식 만들기

이러한 어려움에도 불구하고 저는 사용자 상호 작용을 처리하고 Django의 ORM을 사용하여 모델 간의 관계를 관리하는 방법에 대해 많은 것을 배웠습니다.

이것이 바로 저의 간단한 블로그 앱이 되는 것입니다. 자세한 내용과 앱의 라이브 데모를 보려면 내 Github을 확인하세요.

다음주 목표

저는 제 기술과 지식을 향상시키기 위해 또 다른 Django 프로젝트를 만들 계획입니다.

Django 프로젝트에서 함께 작업하면 좋은 프로젝트나 콜라보레이션이 무엇인지 알고 계시다면 자유롭게 댓글을 남겨주세요.

제 여정에 대한 추가 업데이트를 기대해 주세요!

위 내용은 주 간단한 블로그 앱 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!