[Django] 스타벅스 뷰 작성하기
뷰는 작성된 모델을 바탕으로, 들어오는 데이터를 어떻게 처리할지에 대한 논리를 맡고 있다.
이제부터 스타벅스 제품 모델을 작성한 것에 이어 뷰를 작성해보자.
View 작성 포인트
1. Django Shell에서 먼저 연습하기
shell에서 작동하는 코드는 view에서도 유효하다. 무작정 view 로직부터 작성하지 말고, shell에서 충분히 연습해보자! 연습이 제대로 안 된 것 같다 싶으면 다시 shell으로 돌아가자.
예를 들어 각각의 쿼리셋 메소드가 어떤 형태의 값을 반환하는지, one-to-many 관계에서 참조하는 값은 어떻게 불러오는지 등 말이다.
2. 에러 잘 처리하기
서버 쪽 에러가 나면 500 Error가 발생하고 로직이 중단되기 때문에 에러가 날 경우를 미리 테스트해서 방지해야 한다.
에러를 처리하는 방법에는 try, except문 또는 if문 방식이 있다.
에러가 이미 발생되고 except로 처리하는 것보다 에러가 발생할 경우를 미리 if문으로 대비하는 게 낫다. 에러가 실제로 발생하는 경우를 줄이는 것이 낫기 때문이다.
3. 컨벤션 잘 맞추기
컨벤션을 맞추면서 코드를 작성하면 코드가독성도 좋아지고 나중에 리펙토링할 때도 편리하다.
뷰 작성하기
모듈 import
python 모듈, django 모듈, 내가 만든 클래스 순서대로 내가 필요한 모듈을 import해서 사용한다.
import json
from django.views import View
from django.http import JsonResponse
from products.models import (
Menu,
Category,
Product,
Image,
Allergy,
)
MenuView
class MenuView(View):
def get(self, request):
menu = list(Menu.objects.values())
return JsonResponse({'data':menu}, status=200)
def post(self, request):
data = json.loads(request.body)
menu_name = data.get('name', None)
print(menu_name)
if not menu_name:
return JsonResponse({'MESSAGE': 'KEY_ERROR'}, status=400)
if Menu.objects.filter(name=data['name']).exists:
return JsonResponse({'message': 'ALREADY_EXISTS'}, status=409)
Menu.objects.create(name=menu_name)
return JsonResponse({'MESSAGE' : 'SUCCESS'}, status=200)
CategoryView
class CategoryView(View):
def get(self, request):
menu= list(Category.objects.create())
return JsonResponse({'data':menu}, status=200)
def post(self,request):
data = json.loads(request.body)
category_name=data.get('name', None)
menu_name=data.get('menu_name', None)
if not (category_name and menu_name):
return JsonResponse({'MESSAGE' : 'KEY_ERROR'}, status=400)
if Category.objects.filter(name=category_name).exists():
return JsonResponse({'MESSAGE' : 'KEY_ERROR'}, status=400)
if not Menu.objects.filter(name=menu_name).exists():
return JsonResponse({'MESSAGE':'FOREIGN_KEY_DOES_NOT_EXIST'}, status=404)
menu = Menu.objects.get(name=menu_name)
Category.objects.create(
name=category_name,
menu=menu
)
return JsonResponse({'MESSAGE':'SUCEESS'}, status=201)
ProductView
def post(self, request):
data = json.loads(request.body)
name = data.get('product_name', None)
description = data.get('description', None)
category_name = data.get('category', None)
if not (name and description and category_name):
return JsonResponse({'message': 'KEY_ERROR'}, status=400)
if not Category.objects.filter(name=category_name).exists():
return JsonResponse({'message': 'DOES_NOT_EXIST'}, status=404)
category = Category.objects.get(name=data.get('category'))
product = Product.objects.create(
name = name,
description = description,
category = category
)
return JsonResponse({'message': 'SUCCESS'}, status=201)
URL 지정하기
루트디렉토리의 URL
starbucks/urls.py
from django.urls import path, include
urlpatterns = [
path('products', include('products.urls'))
]
해당 앱의 URL
products.urls.py
from django.urls import path
from .views import MenuView,CategoryView,ProductView
urlpatterns = [
path('/menu', MenuView.as_view()),
path('/category', CategoryView.as_view()),
path('/product', ProductView.as_view())
]
Author And Source
이 문제에 관하여([Django] 스타벅스 뷰 작성하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kjhabc2002/Django-스타벅스-뷰-작성하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)