[TIL/Django] C.R.U.D 2 (westarbucks view 작성)

나른한 개발자·2022년 1월 17일
0

studylog

목록 보기
27/45
post-custom-banner

이번에는 지난번에 작성한 westarbucks model을 가지고 음료를 등록하고 조회하는 view를 작성해보려고 한다.

  • post(): request에 음료 이름, 설명, 카테고리 아이디의 정보가 함께 오면 category_id에 맞는 레코드에 정보를 저장한다.
  • get(): 음료들의 정보를 QuerySet에 담아 리스트 내 딕셔너리로 넣어준 후 해당 리스트를 반환한다.
import json

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

from products.models import Menu, Drink, Category

class ProductView(View):
    def get(self, request):
        # GET 127.0.0.1:8000
        drinks = Drink.objects.all()
        
        result = []

        for drink in drinks:
            result.append(
                {
                    "korean_name": drink.korean_name,
                    "english_name": drink.english_name,
                    "description": drink.description,
                    "category": drink.category.name
                }
            )
        print(f"results objects: {result}")

        return JsonResponse({"drink": result}, status=200)


    def post(self, request):
        # POST 127.0.0.1:8000
        data = json.loads(request.body)

        category = Category.objects.get(name=data["category"])

        drink = Drink.objects.create(
            korean_name = data["korean_name"],
            english_name = data["english_name"],
            description = data["description"],
            category_id = category.id
        )

        return JsonResponse({"message" : "SUCESS"}, status=201)

  • json.loads(): 프론트에서 넘어오는 데이터는 json 형이기 때문에 파이썬이 이해할 수 있는 dictionary형태로 바꾸어 준다.
  • QuerySet은 Json타입으로 바꿀 수 없다. 따라서 Json으로 바꿀 수 있는 리스트나 딕셔너리 같은 파이썬 기본자료형으로 변환하여 응답에 보내야한다.
profile
Start fast to fail fast
post-custom-banner

0개의 댓글