될때까지

((WnB)) 9일차 : 포스트맨 왜케 어려워 본문

프로젝트/wecode2차 : WnB

((WnB)) 9일차 : 포스트맨 왜케 어려워

랖니 2022. 8. 9. 22:27
728x90

담당했던 기능은 모두 구현이 끝난 상황. 1차 프로젝트때 추가사항을 진행하지 않고 개인공부를 진행했더니 아쉬움이 많이 남았었다. 그래서 이번에는 AWS S3를 이용해 숙소에 관한 CRUD를 구현해보기로 했다.

우선 WnB의 Room 객체를 생성하기 위해서는 많은 컬럼값들이 필요한데 그 중에서 여러개의 값을 어떻게 받을까.. 예를 들어 하나의 숙소에는 여러가지의 편의시설이 존재한다.(와이파이, 에어컨, 온수, 세탁기 등) 그리고 하나의 편의시설은 여러개의 숙소에 존재한다.(방1, 방2, 방3 모두 와이파이가 가능한 경우) 그래서 모델링할 때 다대다의 중간 테이블을 생성했었다. 휴 새삼 다시 느끼는 모델링의 중요성 안그랬으면 모델링 다 뒤집어야했.... 😱 방을 등록하려면 해당 방의 편의시설도 등록을 해야하는데 편의시설은 1개가 아니다. 여러개를 리스트로 어떻게 받을까...?

class HostView(View):
    def post(self, request):
        data        = request.POST
        test        = data['test'].split(',')[:-1]
        print(test)
        return JsonResponse({'message':'test'})

애정하는 35기 백엔드 동기님께서 POST기능을 구현했길래 코드를 보고 내 코드에 적용을 하기 전, 해당 코드의 반환값을 테스트를 해봤다. request.POST로 받은 data에 'test'라는 키값의 여러가지 값들을 컴마 기준으로 나눠서 리스트에 담아 test라는 변수에 담기겠거니 하고 실행했지만 에러가 떴다.. 왤까? 이럴 때 쓰는 게 아닌가?

포스트맨에서 이제까지 데이터를 formData가 아닌 raw로 보냈다. 근데 raw말고 formData에 실어 보내니까 예상했던 결과물이 리스트에 잘 담겨서 찍혔다. 왤까??? raw와 formData의 차이가 무엇인지 궁금하다. 

-> raw는 텍스트 데이터 자체를 보낼 때 사용하고, form-Data는 양식이 있는 경우(ex. 키:벨류)를 쉽게 보낼 때 사용한다고 한다. 그거랑 리스트로 안나오는거랑은 상관없네

        ## 케이스 1번.
        data        = request.POST     
        test        = data['test'].split(',')[:-1]
        print('data', data)   # 포스트맨에서 raw로 테스트하면 안나와!! 에러발생 django.utils.datastructures.MultiValueDictKeyError: 'test'
        print('test',test)    # 근데 포스트맨에서 form-Data로 테스트하면 나와!!
        
        
        ## 케이스 2번.
        data = json.loads(request.body)     
        test = data['test'].split(',')
        print('test', test)     # 얘는 포스트맨에서 raw로 테스트하면 나와!!
728x90