[Westagram] -7

김가람휘·2022년 2월 24일
0

Westagram

목록 보기
7/9

[Mission 7] 게시물 등록 기능 구현

[Mission 8] 게시물 댓글 등록 기능 구현

[Mission 9] 게시물 '좋아요' 기능 구현

1. Postings app 생성

python manage.py startapp postings

2. Posting Model, Comment Model, Like Model 생성

# postings.models.py
from django.db import models

class Posting(models.Model):
    user       = models.ForeignKey('users.User', on_delete=models.CASCADE)
    img_url    = models.URLField(max_length=300)
    content    = models.CharField(max_length=1000)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'postings'

class Comment(models.Model):
    user       = models.ForeignKey('users.User', on_delete=models.CASCADE)
    post       = models.ForeignKey('Posting', on_delete=models.CASCADE)
    content    = models.CharField(max_length=1000)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'comments'

class Like(models.Model):
    user       = models.ForeignKey('users.User', on_delete=models.CASCADE)
    post       = models.ForeignKey('Posting', on_delete=models.CASCADE)

    class Meta:
        db_table = 'like'  

3. Posting View, Comment View, Like View 생성

# postings.views.py
import json

from django.http  import JsonResponse
from django.views import View

from users.models    import User
from postings.models import Posting, Comment, Like

class PostingView(View):
    def post(self, request): # 게시글 등록
        data = json.loads(request.body)
        try:
            user_id = data['user_id']
            img_url = data['img_url']
            content = data['content']

            if not User.objects.filter(id = user_id).exists(): 
                return JsonResponse({'message': "User Does Not Exist"}, status=404)

            Posting.objects.create(
                user     = User.objects.get(id=user_id),
                img_url  = img_url,
                content  = content
            )
            
            return JsonResponse({'message':'SUCCESS'}, status=201) 
    
        except KeyError:
            return JsonResponse({'message' : 'KEY_ERROR'},status=400)

    def get(self, request): # 게시글 표출
        postings = Posting.objects.all()
        results  = [] 

        for posting in postings:
           results.append(
               {
                   "user"       : User.objects.get(id=posting.user_id).username,
                   "img_url"    : posting.img_url,
                   "content"    : posting.content,
                   "created_at" : posting.created_at
               }
           )
       
        return JsonResponse({'resutls':results}, status=200)

class CommentView(View):
    def post(self, request): # 댓글 등록
        data = json.loads(request.body)
        try:
            user_id    = data['user_id']
            post_id    = data['post_id']
            content    = data['content']

            if not User.objects.filter(id = user_id).exists(): 
                return JsonResponse({'message': "User Does Not Exist"}, status=404)

            if not Posting.objects.filter(id = post_id).exists(): 
                return JsonResponse({'message': "Posting Does Not Exist"}, status=404)

            Comment.objects.create(
                user_id = user_id,
                post_id = post_id,
                content = content
            )
            
            return JsonResponse({'message':'SUCCESS'}, status=201) 
    
        except KeyError:
            return JsonResponse({'message' : 'KEY_ERROR'},status=400)

    def get(self, request): # 댓글 표출
        comments = Comment.objects.all()
        results  = [] 

        for comment in comments:
           results.append(
               {
                   "user"       : User.objects.get(id = comment.user_id).username,
                   "posting"    : Posting.objects.get(id = comment.post_id).id,
                   "content"    : comment.content,
                   "created_at" : comment.created_at
               }
           )
       
        return JsonResponse({'resutls':results}, status=200)

class LikeView(View):
    def post(self, request):
        data = json.loads(request.body)
        try:
            user_id    = data['user_id']
            post_id    = data['post_id']

            if not User.objects.filter(id = user_id).exists(): 
                return JsonResponse({'message': "User Does Not Exist"}, status=404)

            if not Posting.objects.filter(id = post_id).exists(): 
                return JsonResponse({'message': "Posting Does Not Exist"}, status=404)

            if Like.objects.filter(user = user_id, post = post_id).exists():
                return JsonResponse({'message': "You've already pressed like"}, status=404)

            Like.objects.create(
                user_id = user_id,
                post_id = post_id
            )
            
            return JsonResponse({'message':'SUCCESS'}, status=201) 
    
        except KeyError:
            return JsonResponse({'message' : 'KEY_ERROR'},status=400)

5. Urls.py 작성

# urls.py
from django.urls import path, include

urlpatterns = [
    path('users', include('users.urls')),
    path('postings', include('postings.urls'))
]
# postings/urls.py
from django.urls import path

from postings.views import PostingView, CommentView, LikeView

urlpatterns = [
    path('/posting', PostingView.as_view()),
    path('/comment', CommentView.as_view()),
    path('/like', LikeView.as_view())
]

0개의 댓글