Heim  >  Artikel  >  Backend-Entwicklung  >  Woche zum Erstellen einer einfachen Blog-App

Woche zum Erstellen einer einfachen Blog-App

王林
王林Original
2024-07-26 11:16:23510Durchsuche

Week  Creating Simple Blog App

Einführung

Willkommen zurück zu 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:

App für Django-Beiträge 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 Modelle „Kommentieren“ und „Gefällt mir“ erstellt, damit Benutzer Kommentare und „Gefällt mir“-Angaben zu Beiträgen hinterlassen 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/<int:pk>/", postDetails, name="post-detail"),
    path("post/<int:pk>/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.
  • Erstellen von Formulareinreichungen für Kommentare in der Beitragsdetailansicht.

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!

Das obige ist der detaillierte Inhalt vonWoche zum Erstellen einer einfachen Blog-App. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Django-Grundlagen verstehenNächster Artikel:Django-Grundlagen verstehen