[Django] Django C.R.U.D (2) 과제

Jeongyun Heo·2021년 1월 27일
0

django

목록 보기
4/4
post-thumbnail

products/models.py

~/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 요청 보내기

http -v POST 127.0.0.1:8000/products menu='음료' category='콜드브루' product:='{"name":"맛있는 콜드브루", "price":5400}'

westarbucks/urls.py

~/projects/westarbucks_new/westarbucks

from django.urls import path, include

urlpatterns = [
    path('products', include('products.urls'))
]

products로 시작되는 페이지 요청은 products 앱 안에 있는 urls에서 처리하라는 의미

products/urls.py

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 파일 안에 있는 함수로 연결시켜줌

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)  

0개의 댓글