„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Woche zum Erstellen einer einfachen Blog-App

Woche zum Erstellen einer einfachen Blog-App

Veröffentlicht am 29.07.2024
Durchsuche:193

Week  Creating Simple Blog App

Einführung

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.

Hier ist eine detaillierte Aufschlüsselung dessen, was ich getan habe:

Django-Posts-App erstellen

python manage.py startapp posts

Entwerfen des Post-Modells

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

Entwerfen des Kommentar- und Like-Modells

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}"

Ansichten erstellen

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)

Als nächstes wird urls.py in einer Posts-App erstellt

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"),
]

Herausforderungen und Erkenntnisse

Diese Woche stand ich vor Herausforderungen mit:

  • Stellen Sie sicher, dass Benutzer mit der Schaltfläche „Gefällt mir“ einen Beitrag einmal mit „Gefällt mir“ markieren können.
  • Formulareinreichungen für Kommentare in der Beitragsdetailansicht erstellen.

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.

Ziele für die nächste Woche

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!

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/jjayfabor/week-2-creating-simple-blog-app-ie1?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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