2021.04.28

gigymi2005·2021년 4월 28일
0

TIL

목록 보기
11/55

공부시간

  • 9시간 57분

null

null = True 를 해주면 필드의 값이 NULL(정보 없음)으로 저장되는 걸 허용해준다. NULL(정보 없음)을 넣는 방법은 파이썬 쉘에서 값을 넣을때 해당 변수를 넣어주지 않으면 자동으로 NULL값으로 저장된다.


참조/ 역참조

  • 아래 사진에서 categories테이블은 menu테이블을 (정)참조한다.
    반대로 menu테이블은 categories테이블을 역참조한다.
  • 정참조 관계에서는 아래와 같이 .을 사용해서 참조테이블의 값을 가져올 수 있다.
  • 역참조 관계에서는 아래와 같이 역참조되는 테이블명에 _set을 써서 불러올 수 있다.

Django C.R.U.D(2)

  • HTTP 통신 과정
    Client의 HTTP 요청분석(urls.py)하여 요청을 처리하기 위한 로직(views.py)을 실행시켜, 데이터베이스와 통신(models.py)하여 데이터 작업을 수행하고 요청에 맞는 HTTP 응답을 Client에게 보내준다.

westarbucks2/westarbucks2/urls.py

from django.urls import path, include

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

path함수를 이용해 연결하고자 하는 앱이름과 그 앱의 urls.py를 넣어 경로를 만들어 준다.

westarbucks2/products/urls.py
from django.urls    import path

from products.views import ProductsView

urlpatterns = [
    path('', ProductsView.as_view())
]

path 함수를 통해 가고자하는 경로를 ProductsView클래스에 연결시킨다.

westarbucks2/products/views.py

  • get 메소드
import json

from django.http     import JsonResponse
from django.views    import View
from products.models import Menu, Category, Product, Nutrition

class ProductsView(View):
    def get(self, request):
        products = Product.objects.all()
        results  = []
        for product in products:
            results.append(
		    {	
                        "menu"         : product.category.menu.name,
			"category"     : product.category.name,
			"product_name" : product.korean_name
		    }
	    )
  
        return JsonResponse({'resutls':results}, status=200)

get메소드에서는 product테이블에 있는 값을 모두 QuerySet으로 불러와 result리스트에 딕셔너리 형태로 넣어준후 JsonResponse를 통해 리턴해준다.

  • post 메소드
   def post(self, request):
        data     = json.loads(request.body)
        menu     = Menu.objects.create(name=data['menu'])
        category = Category.objects.create(
                name = data['category'],
                menu = menu
        )
        nutrition = Nutrition.objects.create(product_name = data['nutrition'])
        product = Product.objects.create(
        	korean_name = data['product'], 
                category = category,
                nutrition = nutrition
        )
        return JsonResponse({'MESSAGE':'SUCCESS'}, status=201)

post메소드에서는 request로 받은 정보의 value값을 이용해서 models.py에 있는 테이블들의 attribute에 새로운 인스턴스를 생성하거나 수정한다.

profile
공부의 끝은 남들에게 설명하는 것

0개의 댓글