«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Неделя создания простого приложения для блога

Неделя создания простого приложения для блога

Опубликовано 29 июля 2024 г.
Просматривать:887

Week  Creating Simple Blog App

Введение

Добро пожаловать обратно в мой путь создания приложения для блога с использованием Django без использования ChatGPT. На этой неделе я сосредоточился на реализации ключевых функций для улучшения моего приложения для блога. Я добавил функцию, которая позволяет пользователям создавать сообщения, комментировать сообщения и ставить лайки сообщениям других пользователей.

Вот подробное описание того, что я сделал:

Приложение для создания сообщений Django

python manage.py startapp posts

Разработка модели публикации

Я начал с разработки модели Post. Эта модель будет хранить сообщения в блоге, созданные пользователями:

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)

Далее — создание urls.py в приложении для публикаций

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, чтобы улучшить свои навыки и знания.

Если у вас есть идеи, над каким проектом лучше всего работать или сотрудничать над проектом Django, оставьте комментарий.

Следите за новостями о моем путешествии!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/jjayfabor/week-2-creating-simple-blog-app-ie1?1. Если обнаружено какое-либо нарушение прав, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3