레시피, 재료, 조리순서의 모델을 분리하고 api를 각각 작성했으나 1번 요청 받을 때 백에서 각각 모델에 처리하도록 수정하고자 함.
{
"description": "레시피 관련 정보들",
"title": "레시피 이름",
"recipe_thumbnail": 파일추가,
"recipe_ingredients": "아욱, 양파, 두부, 된장, 감자",
"recipe_order":[
{
"content": "아욱 섬유질 제거",
"order": 1
"recipe_img": 파일추가,
},
{
"content": "물끓이기",
"order": 2,
"recipe_img": 파일추가,
},
# 조리 순서만큼 반복
]
}
postman에서 raw data로 보냈을 때는 문제가 없었는데, 사진을 추가하기위해 form-data로 보내려고 하자 오류 발생.
확인 해보니 form-data의 경우 file이나 text로 전달이 되어서 list안에 dict 구조로 되어있던 recipe_order가 str으로 변경되어서 오류가 발생함.
그리고 postman으로 테스트할 때 조리사진(recipe_img)의 이미지를 보낼 방식이 없었음.
일반 텍스트의 경우는 원래의 구조로 변경 가능했으나, 이미지의 처리를 고민함.
form-data안의 form-data를 받을 방법을 찾을 수 없어 생각해낸 방식은 2가지
- 그냥 레시피 순서를 분리하여 순서만큼 n번의 요청을 보내기
- recipe_img를 분리하여 request body에 파일로 추가하기
2번 방식을 선택하여 키값은 recipe_order의 order 값으로 하고 이미지를 추가하도록 수정
한번의 요청을 받아 레시피,재료,순서 전부 일괄 저장되도록 수정함.
orders = eval(request.data["recipe_order"]) # str -> [{},{}] 형태로 변경
for i in range(1, len(orders)+1):
# 조리 순서 이미지 없으면 null, request body에 조리 순서 이미지의 키값 없으면 null
recipe_img = request.data.get(f'{i}') if request.data.get(f'{i}') else None
order_image_data = {
"order": i,
"content": orders[i-1]["content"],
"recipe_img": recipe_img,
}
order_image_serializer = OrderCreateSerializer(data=order_image_data)
if order_image_serializer.is_valid():
order_image_serializer.save(article_recipe_id=recipe.id)
else:
return Response("순서를 확인해주세요.", status=status.HTTP_400_BAD_REQUEST)
작업을 하면서도 요청을 n번 보내는 것보다는 백에서 이렇게.. 처리하는게 효율적인게 맞나...? 의문이 들었다. 그냥 원래있는 api로 보내면 쉬운데... 조리순서 작성은 nnn개씩 하는 것도 아니고 많아봐야 1n개 정도 일 것 같은데... 이 부분은 다음 피드백 시간에 물어봐야겠음