ChatGPT를 사용하지 않고 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)
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!