Rumah > pembangunan bahagian belakang > Tutorial Python > Minggu Mencipta Apl Blog Mudah

Minggu Mencipta Apl Blog Mudah

王林
Lepaskan: 2024-07-26 11:16:23
asal
533 orang telah melayarinya

Week  Creating Simple Blog App

Pengenalan

Selamat datang kembali ke perjalanan saya membina apl blog menggunakan Django tanpa menggunakan ChatGPT. Minggu ini, saya menumpukan pada melaksanakan ciri utama untuk meningkatkan aplikasi blog saya. Saya menambah fungsi yang membolehkan pengguna membuat siaran, mengulas pada siaran dan menyukai siaran pengguna lain.

Berikut ialah pecahan terperinci tentang perkara yang saya lakukan:

Buat apl siaran Django

python manage.py startapp posts
Salin selepas log masuk

Mereka Model Siaran

Saya mula dengan mereka bentuk model Post. Model ini akan menyimpan catatan blog yang dibuat oleh pengguna:

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
Salin selepas log masuk

Merancang Komen dan Suka Model

Seterusnya, saya mencipta juga model Komen dan Suka untuk membolehkan pengguna meninggalkan ulasan dan suka pada siaran:

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}"
Salin selepas log masuk

Mencipta Pandangan

Saya tidak akan memasukkan templat juga. Saya mencipta pandangan untuk mencipta, menyenaraikan semua siaran dan memaparkan siaran individu:

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)
Salin selepas log masuk

Seterusnya ialah membuat urls.py dalam apl siaran

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"),
]
Salin selepas log masuk

Cabaran dan Pembelajaran

Minggu ini, saya menghadapi cabaran dengan:

  • Memastikan butang suka membolehkan pengguna menyukai siaran sekali.
  • Membuat penyerahan borang untuk ulasan dalam paparan butiran siaran.

Walaupun menghadapi cabaran ini, saya belajar banyak tentang mengendalikan interaksi pengguna dan bekerja dengan ORM Django untuk mengurus perhubungan antara model.

Dan itu menjadikan Aplikasi Blog Mudah saya. Semak Github saya untuk mendapatkan butiran lanjut dan demo langsung apl itu.

Matlamat Minggu Depan

Saya merancang untuk mencipta satu lagi projek Django untuk meningkatkan kemahiran dan pengetahuan saya.

Jika anda mempunyai sebarang idea tentang projek yang bagus untuk diusahakan atau kerjasama dalam projek Django, sila tinggalkan ulasan.

Nantikan lebih banyak kemas kini tentang perjalanan saya!

Atas ialah kandungan terperinci Minggu Mencipta Apl Blog Mudah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan