"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > أسبوع إنشاء تطبيق مدونة بسيط

أسبوع إنشاء تطبيق مدونة بسيط

تم النشر بتاريخ 2024-07-29
تصفح:793

Week  Creating Simple Blog App

مقدمة

مرحبًا بكم مرة أخرى في رحلتي لإنشاء تطبيق مدونة باستخدام Django دون استخدام ChatGPT. ركزت هذا الأسبوع على تنفيذ الميزات الأساسية لتحسين تطبيق مدونتي. لقد أضفت وظيفة تسمح للمستخدمين بإنشاء منشورات، والتعليق على المنشورات، والإعجاب بمشاركات المستخدمين الآخرين.

إليك تفصيلًا تفصيليًا لما فعلته:

إنشاء تطبيق منشورات Django

python manage.py startapp posts

تصميم نموذج المشاركة

لقد بدأت بتصميم نموذج النشر. سيقوم هذا النموذج بتخزين منشورات المدونة التي أنشأها المستخدمون:

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//", postDetails, name="post-detail"),
    path("post//like/", like_post, name="like-post"),
    path("myposts/", myPosts, name="my-posts"),
]

التحديات والدروس المستفادة

واجهت هذا الأسبوع تحديات مع:

  • التأكد من أن زر الإعجاب يسمح للمستخدمين بالإعجاب بالمنشور مرة واحدة.
  • إنشاء نماذج إرسال للتعليقات ضمن عرض تفاصيل المنشور.

على الرغم من هذه التحديات، تعلمت الكثير عن التعامل مع تفاعلات المستخدم والعمل مع ORM الخاص بـ Django لإدارة العلاقات بين النماذج.

وهذا ما يجعل تطبيق مدونتي البسيط. تحقق من Github للحصول على مزيد من التفاصيل وعرض توضيحي مباشر للتطبيق.

أهداف الأسبوع القادم

أخطط لإنشاء مشروع جانغو آخر لتحسين مهاراتي ومعرفتي.

إذا كانت لديك أي فكرة عن المشروع الجيد للعمل عليه أو التعاون في مشروع Django، فلا تتردد في ترك تعليق.

ترقبوا المزيد من التحديثات في رحلتي!

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/jjayfabor/week-2-creating-simple-blog-app-ie1?1 إذا كان هناك أي انتهاك، فيرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3