Django|Instagramクローンエンコーディング(9)-投稿の削除、変更、コメント
💇♀️ 投稿とコメントの削除、変更
前回はインスタ注目機能を実施しました.投稿を削除および変更する機能を実装します.同様に、この機能は、ログインレコーダを使用してログインしている特権ユーザーのみが使用できます.
🔎 投稿とコメントの削除、修正機能の分析
削除、変更できるのは、投稿とその作成者のみです.コメントも同じです 投稿は削除および変更できますが、削除できるのは投稿のみで、変更できません. 投稿を変更する場合は、投稿の内容(内容)のみ変更でき、画像(画像url)は変更できません. 🛠 App
投稿およびコメントを削除および変更する機能は、投稿に関連しています.
🖌 モデルの作成
💣 ビューの作成
投稿とコメントの削除
投稿とコメントは同じ削除ロジックを持っているため、投稿に基づいて説明します.
part1. PostingDetailViewの作成
投稿を削除すると、通常、特定の投稿のidが受信され、削除されます.すべてを一度に削除することはありません.したがって、
通常、投稿を削除できるのは投稿のみです.したがって、ログイントークンを介して受信したユーザー情報(
part1. Post関数でのPost関数の使用
修正には、
修正するときは
削除機能と同様に、ログインしたユーザーと作成者が同じであることを確認してください.
Part3. 投稿の変更
ディックラウンジgetメソッドを使って修正機能を実現します.
この方法の利点をトランスファで詳細に説明した.
前回はインスタ注目機能を実施しました.投稿を削除および変更する機能を実装します.同様に、この機能は、ログインレコーダを使用してログインしている特権ユーザーのみが使用できます.
🔎 投稿とコメントの削除、修正機能の分析
削除、変更できるのは、
投稿およびコメントを削除および変更する機能は、投稿に関連しています.
posting
アプリケーションで作成してください.🖌 モデルの作成
# posting/models.py
from django.db import models
from user.models import User
class Posting(models.Model):
content = models.CharField(max_length=2000, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True) --> 추가
user = models.ForeignKey('user.User', on_delete=models.CASCADE)
class Meta:
db_table = 'postings'
Posting
クラスでは、投稿の作成時間を記録するためにcreated_at
しか使用されず、変更時間を記録するためにupdated_at
フィールドが追加されています.💣 ビューの作成
投稿とコメントの削除
投稿とコメントは同じ削除ロジックを持っているため、投稿に基づいて説明します.
part1. PostingDetailViewの作成
投稿を削除すると、通常、特定の投稿のidが受信され、削除されます.すべてを一度に削除することはありません.したがって、
PostingDetailView
クラスを作成して詳細を管理できます.class PostingDetailView(View):
part2. ログインしたユーザーと作成者が同じかどうかを確認します.通常、投稿を削除できるのは投稿のみです.したがって、ログイントークンを介して受信したユーザー情報(
user
)が、ロケーションの作成者(posting.user
)と同じであることを確認してください.@login_decorator
def delete(self, request, posting_id):
user = request.user
if not Posting.objects.filter(id=posting_id).exists():
return JsonResponse({'message':'POSTING_DOES_NOT_EXIST'}, status=404)
posting = Posting.objects.get(id=posting_id)
if user != posting.user:
return JsonResponse({'message':'INVALID_USER'}, status=401)
投稿の変更part1. Post関数でのPost関数の使用
修正には、
PostingDetailView
によって記述された詳細も含まれる.修正するときは
patch
かput
を使うことができますが、post
を使います.class PostingDetailView(View):
(...생략)
@login_decorator
def post(self, request, posting_id):
part2. ログインしたユーザーと作成者が同じかどうかを確認します.削除機能と同様に、ログインしたユーザーと作成者が同じであることを確認してください.
Part3. 投稿の変更
ディックラウンジgetメソッドを使って修正機能を実現します.
この方法の利点をトランスファで詳細に説明した.
posting.content = data.get('content', posting.content)
posting.save()
👀 フルビューコード# posting/views.py
(...생략)
class PostingDetailView(View):
@login_decorator
def delete(self, request, posting_id):
user = request.user
if not Posting.objects.filter(id=posting_id).exists():
return JsonResponse({'message':'POSTING_DOES_NOT_EXIST'}, status=404)
posting = Posting.objects.get(id=posting_id)
if user != posting.user:
return JsonResponse({'message':'INVALID_USER'}, status=401)
Posting.objects.filter(id=posting.id).delete()
return JsonResponse({'message': 'SUCCESS'}, status=200)
@login_decorator
def post(self, request, posting_id):
try:
data = json.loads(request.body)
user = request.user
if not Posting.objects.filter(id=posting_id).exists():
return JsonResponse({'message': 'POSTING_DOES_NOT_EXIST'}, status=404)
posting = Posting.objects.get(id=posting_id)
if user != posting.user:
return JsonResponse({'message':'INVALID_USER'}, status=401)
posting.content = data.get('content', posting.content)
posting.save()
return JsonResponse({'message': 'SUCCESS'}, status=201)
except JSONDecodeError:
return JsonResponse({'message':'JSON_DECODE_ERROR'}, status=400)
(...생략)
class CommentDetailView(View):
@login_decorator
def delete(self, request, comment_id):
user = request.user
if not Comment.objects.filter(id=comment_id).exists():
return JsonResponse({'message':'COMMENT_DOES_NOT_EXIST'}, status=404)
comment = Comment.objects.get(id=comment_id)
if user != comment.user:
return JsonResponse({'message':'INVALID_USER'}, status=401)
Comment.objects.filter(id=comment.id).delete()
return JsonResponse({'message': 'SUCCESS'}, status=200)
📬 urlパスの指定# posting/urls.py
from django.urls import path
from .views import (
PostingView,
PostingSearchView,
PostingDetailView, --> 추가
CommentView,
CommentSearchView,
CommentDetailView, --> 추가
LikeView,
)
urlpatterns = [
path('', PostingView.as_view()),
path('/search/<int:user_id>', PostingSearchView.as_view()),
path('/<int:posting_id>', PostingDetailView.as_view()), --> 추가
path('/comment', CommentView.as_view()),
path('/comment/search/<int:posting_id>', CommentSearchView.as_view()),
path('/comment/<int:comment_id>', CommentDetailView.as_view()), --> 추가
path('/like', LikeView.as_view()),
]
Reference
この問題について(Django|Instagramクローンエンコーディング(9)-投稿の削除、変更、コメント), 我々は、より多くの情報をここで見つけました https://velog.io/@suasue/Django-인스타그램-클론-코딩9-게시물-및-댓글-삭제-수정テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol