Willkommen zurück auf meiner Reise, eine Blog-App mit Django zu erstellen, ohne ChatGPT zu verwenden. Diese Woche habe ich mich auf die Implementierung wichtiger Funktionen zur Verbesserung meiner Blog-App konzentriert. Ich habe eine Funktion hinzugefügt, die es Benutzern ermöglicht, Beiträge zu erstellen, Beiträge zu kommentieren und die Beiträge anderer Benutzer zu liken.
python manage.py startapp posts
Ich habe mit dem Entwurf des Post-Modells begonnen. Dieses Modell speichert die von Benutzern erstellten Blogbeiträge:
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
Als nächstes habe ich auch die Kommentare- und „Gefällt mir“-Modelle erstellt, damit Benutzer Kommentare hinterlassen und Beiträge liken können:
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}"
Ich werde die Vorlagen nicht mit einbeziehen. Ich habe Ansichten zum Erstellen, Auflisten aller Beiträge und Anzeigen einzelner Beiträge erstellt:
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"), ]
Diese Woche stand ich vor Herausforderungen mit:
Trotz dieser Herausforderungen habe ich viel über den Umgang mit Benutzerinteraktionen und die Arbeit mit Djangos ORM gelernt, um Beziehungen zwischen Modellen zu verwalten.
Und das macht meine einfache Blog-App aus. Weitere Details und eine Live-Demo der App finden Sie auf meinem Github.
Ich habe vor, ein weiteres Django-Projekt zu erstellen, um meine Fähigkeiten und Kenntnisse zu verbessern.
Wenn Sie eine Idee haben, an welchem Projekt Sie gut arbeiten oder an einem Django-Projekt zusammenarbeiten können, können Sie gerne einen Kommentar hinterlassen.
Bleiben Sie dran für weitere Updates zu meiner Reise!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3