創建簡單部落格應用程式的一周

王林
發布: 2024-07-26 11:16:23
原創
487 人瀏覽過

Week  Creating Simple Blog App

簡介

歡迎回到我使用 Django 而不使用 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)
登入後複製

接下來是在帖子應用程式中創建 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學習者快速成長!