~/projects/westarbucks_new/products
from django.db import models
class Menu(models.Model):
name = models.CharField(max_length=20)
class Meta:
db_table = 'menu'
class Category(models.Model):
name = models.CharField(max_length=20)
menu = models.ForeignKey('Menu', on_delete=models.CASCADE)
class Meta:
db_table = 'categories'
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.IntegerField()
category = models.ForeignKey('Category', on_delete=models.CASCADE) # 수정
class Meta:
db_table = 'products'
http -v POST 127.0.0.1:8000/products menu='음료' category='콜드브루' product:='{"name":"맛있는 콜드브루", "price":5400}'
~/projects/westarbucks_new/westarbucks
from django.urls import path, include
urlpatterns = [
path('products', include('products.urls'))
]
products로 시작되는 페이지 요청은 products 앱 안에 있는 urls에서 처리하라는 의미
products 앱 디렉터리 안에 urls.py 파일 생성하기 (원래 없음)
~/projects/westarbucks_new/products
from django.urls import path
from products.views import ProductsView
urlpatterns = [
path('', ProductsView.as_view())
]
products 앱 안에 있는 views.py 파일 안에 있는 함수로 연결시켜줌
import json
from django.http import JsonResponse
from django.views import View
from products.models import Menu, Category, Product
class ProductsView(View):
def post(self, request): # post method
data = json.loads(request.body)
menu = Menu.objects.create(name=data['menu'])
category = Category.objects.create(
name=data['category'],
menu=menu
)
product = Product.objects.create(
name=data['product']['name'],
price=data['product']['price'],
category=category
)
return JsonResponse({'MESSAGE':'SUCCESS'}, status=201)
def get(self, request): # get method
products = Product.objects.all()
results = []
for product in products:
results.append(
{
"menu":product.category.menu.name,
"category":product.category.name,
"product" :product.name
}
)
return JsonResponse({'results':results}, status=200)