null = True 를 해주면 필드의 값이 NULL(정보 없음)으로 저장되는 걸 허용해준다. NULL(정보 없음)을 넣는 방법은 파이썬 쉘에서 값을 넣을때 해당 변수를 넣어주지 않으면 자동으로 NULL값으로 저장된다.
- 아래 사진에서 categories테이블은 menu테이블을 (정)참조한다.
반대로 menu테이블은 categories테이블을 역참조한다.
- 정참조 관계에서는 아래와 같이
.
을 사용해서 참조테이블의 값을 가져올 수 있다.
- 역참조 관계에서는 아래와 같이 역참조되는 테이블명에
_set
을 써서 불러올 수 있다.
- 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클래스에 연결시킨다.
- 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에 새로운 인스턴스를 생성하거나 수정한다.