세션 내용
View 구성
class ProductListView(View):
def get(self, request):
return
서버 연결 확인
python manage.py runserver
POST
목적 및 json.loads(request.body) 설명
import json
def post(self, request):
'''
함수의 목적: client의 상품 등록 요청에 맞게 database에 상품 정보 생성
1. Input: Product 데이터(json)
2. Output: 상품의 등록 여부 {"message" : "SUCCESS"}
3. How: Input으로 들어온 상품 데이터를 ORM을 이용해서 database의 Product table에 Data 저장
(1) json data -> python dictionary 변환
{
"category_id" : 1,
"description" : "아주 맛있었어요",
"name" : "나이트로 바닐라 크림",
"price" : 5500
}
(2) Product.object.create(Input 데이터)
(3) return {"message" : "SUCCESS"} (dictionary) -> json data 변환 후 저장
함수의 request 파라미터를 계속 가지고 있는 이유
: django post 요청이 들어올 때 body에 담아져 있는 json 데이터를 request 객체 안에 담아서 보내줌
- 반드시 두번째 인자로 request를 받아야만 프론트로 부터 받은 요청을 처리할 수 있음
'''
print(f"request.body :: {request.body}")
input_data = json.loads(request.body)
print(f"json_loaded input_data :: {input_data}")
Product.objects.create()
def post(self, request):
Product.objects.create(
name = input_data["name"],
price = input_data["price"],
category_id = input_data["category_id"]
)
JsonResponse
def post(self, request):
Product.objects.create(
name = input_data["name"],
price = input_data["price"],
category_id = input_data["category_id"]
)
return JsonResponse({"message" : "SUCCESS"}, status = 201)
GET
목적
import json
def get(self, request):
'''
함수의 목적: client의 상품 정보 요청에 맞게 database에 상품 정보 호출 및 가공 후 상품 데이터 반환
1. Input: 없음
2. Output: 상품 목록
result = [{
"id" : 1,
"name" : "A",
"price" : 5000,
"category" : {
"id" : 1,
"name" : "콜드브루"
}
},
{
"id" : 2,
"name" : "B",
"price" : 4000,
"category" : {
"id" : 1,
"name" : "콜드브루"
}
},
...
]
3. How:
Product 테이블의 모든 상품 데이터 조회.
Product Instance 들을 python의 native한 data type인 dictionary로 변환해줘야 한다.
'''
models.py
class Category(models.Model):
name = models.CharField(max_length=20)
image_url = models.CharField(max_length=200)
class Meta:
db_table = 'categories'
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.IntegerField(default=0)
category = models.ForeignKey(category, on_delete=models.CASCADE)
class Meta:
db_table = 'products'
- Category가 Product의 id를 가지고 있는 것이 아니기때문에 Product가 가지고 있는 Category를 찾을 수 없다.
code
import json
def get(self, request):
products = Product.objects.all()
results = []
for product in products:
results.append(
{
"id" : product.id,
"name" : product.name,
"price" : product.price,
"category" : {
"id" : product.category.id
"name" : product.category.name
}
}
)
return JsonResponse({"products" : results}, status = 200)
공부해야 할 것
- class 안 함수 self 인자
- http request, response message 개념 재확인