[Mission 7] 게시물 등록 기능 구현
[Mission 8] 게시물 댓글 등록 기능 구현
[Mission 9] 게시물 '좋아요' 기능 구현
1. Postings app 생성
python manage.py startapp postings
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'
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 작성
from django.urls import path, include
urlpatterns = [
path('users', include('users.urls')),
path('postings', include('postings.urls'))
]
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())
]