from django.db import models
from users.models import User
class TimeStampModel(models.Model):
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
class Meta:
abstract = True
class Like(TimeStampModel):
user = models.ForeignKey('users.User', on_delete=models.CASCADE)
post = models.ForeignKey('Post', on_delete=models.CASCADE)
class Meta:
db_table = 'likes'
post
와 user
를 둘다 foreignkey로 지정해주었음class LikeView(View):
@signin_decorator
def post(self, request):
try:
data = json.loads(request.body)
user = request.user
post_id = data['post']
if not Post.objects.filter(id = post_id).exists():
return JsonResponse({'message':'POSTING_DOES_NOT_EXIST'}, status=404)
post = Post.objects.get(id=post_id)
if Like.objects.filter(user = user, post=post).exists():
Like.objects.filter(user=user, post=post).delete()
like_count = Like.objects.filter(post=post).count()
return JsonResponse({'message':'SUCCESS', 'like_count' : like_count}, status=200)
## 요청받은 유저와 게시글이 일치하는 것 중
## "좋아요"가 눌린 데이터가 DB에 있는지 먼저 확인하고,
## "좋아요"가 눌렸다면 해당 데이터를 삭제(.delete())
## 그리고 좋아요 개수를 카운트한다.
Like.objects.create(
user = user,
post = post
)
like_count = Like.objects.filter(post=post).count()
## 만약 해당하는 게시글에 대한 "좋아요" 데이터가 DB에 없다면
## 바로 DB에 추가!
## 그 후, 좋아요 개수 카운트한다.
return JsonResponse({'message':'SUCCESS', 'like_count' : like_count}, status=200)
except KeyError:
return JsonResponse({"message": 'KEY_ERROR'}, status=400)
postings/urls.py
from django.urls import path
from postings.views import PostView, CommentView, LikeView
urlpatterns = [
path('/post', PostView.as_view()),
path('/comment/<int:post_id>', CommentView.as_view()),
path('/post/like', LikeView.as_view()),
]