Добро пожаловать обратно в мой путь создания приложения для блога с использованием Django без использования ChatGPT. На этой неделе я сосредоточился на реализации ключевых функций для улучшения моего приложения для блога. Я добавил функцию, которая позволяет пользователям создавать сообщения, комментировать сообщения и ставить лайки сообщениям других пользователей.
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)
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, оставьте комментарий.
Следите за новостями о моем путешествии!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3