مرحبًا بكم مرة أخرى في رحلتي لإنشاء تطبيق مدونة باستخدام Django دون استخدام ChatGPT. ركزت هذا الأسبوع على تنفيذ الميزات الأساسية لتحسين تطبيق مدونتي. لقد أضفت وظيفة تسمح للمستخدمين بإنشاء منشورات، والتعليق على المنشورات، والإعجاب بمشاركات المستخدمين الآخرين.
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)
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، فلا تتردد في ترك تعليق.
ترقبوا المزيد من التحديثات في رحلتي!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3