[PROJECT] AIRBNB CLONING #5
Wishlist API
해당 방을 저장하기를 하면 원하는 이름의 위시리스트를 만들고 해당 폴더 안에 저장할 수 있습니다. 그렇기에 모델링을 할 때 wishlist라는 테이블에 이름과 사용자의 테이블이 필요했고, 방과 위시리스트를 잇는 wishlistroom이라는 중간테이블이 필요했습니다.
users/urls
from django.urls import path
from users.views import KakaoSignIn, WishlistView
urlpatterns = [
path("/login/kakao", KakaoSignIn.as_view()),
path("/wishlist", WishlistView.as_view()),
]
users/views
import json, jwt, requests, datetime
from django.views import View
from django.http import JsonResponse
from rooms.models import Room
from users.models import User, Wishlist, WishlistRoom
from core.utils import login_decorator
from my_settings import SECRET_KEY, ALGORITHM
class WishlistView(View):
@login_decorator
def post(self, request):
try:
data = json.loads(request.body)
room_id = data['room_id']
list_id = data['list_id']
list_name = data['list_name']
rooms = Room.objects.get(id=room_id)
user = request.user
if not Wishlist.objects.filter(id=list_id, user=user).exists():
wishlist = Wishlist.objects.create(
user = user,
name = list_name
)
else:
wishlist = Wishlist.objects.get(id=list_id, user=user)
WishlistRoom.objects.create(
room = rooms,
wishlist = wishlist
)
return JsonResponse({'message' : 'LIKED'}, status = 201)
except KeyError:
return JsonResponse({'message' : 'KEY_ERROR'}, status = 400)
except Room.DoesNotExist:
return JsonResponse({'message' : 'ROOM_DOES_NOT_EXIST'}, status = 400)
body에 room_id
, list_id
, list_name
의 항목을 담아 json으로 실어보냅니다.
user
는 login_decorator
의 request.user로 받아 사용하며 해당 방에게 wishlist를 저장해야 하므로 id=room_id
로 지정하였습니다.
만약 Wishlist에 객체가 없다면 생성을 하고 그렇지 않다면 get을 합니다. 그러면서 중간테이블인 wishlistroom을 동시에 생성하도록 하는 로직입니다.
에러가 생길 경우를 대비해 적절한 예외처리를 해주었습니다.
Author And Source
이 문제에 관하여([PROJECT] AIRBNB CLONING #5), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tritny6516/PROJECT-AIRBNB-CLONING-5저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)