Django (Django RestFramework)와 multipart/form-data의 관계

2021. 9. 9. 09:20개인 프로젝트

  • Django로 multipart/form-data의 형태로 자료를 전달하려고 한다.

해당 Request는 Postman을 이용하였다.

Request는 String, List, image를 다 포함하고있다.

파일첨부는 multipart/form-data형태로만 전달되기 때문에, 해당 Content-Type으로 보내기로 했다.

 

String 형태는 자연스럽게 문제없이 진행되었다.

List형태는 rawData형태로 보낼 당시 ["리스트 값", "리스트 값", ... ] 형태와는 다르게,

multipart/form-data에서는 key값을 여러번 주어서 리스트로 전달될 수 있었다. 

 

 

 

 

Django에서 Request로 넘어온 데이터

기존 raw 데이터와는 다르게, dict형태가 아닌 QueryDict라는 객체로 들어오는 것을 확인할 수 있다.

multipart/form-data -> QueryDict

raw data -> dict

 

 

 

 

 

QueryDict의 특징은 특이하게 원래의 데이터를 파싱할 경우, 데이터의 마지막 값만 출력한다는 불편함이 있었다.

 

 

 

 

예를 들어

 

print(request.data['tags'])

    >> ['태그1값', '태그2값', '태그3값']

의 형태가 아닌,

    >> "태그3값"

으로 파싱된다는 점이다.

 

request.data.copy() , request.data.pop() 메소드로 리스트데이터를 한 번에 추출하는 방식으로

        print(request.data,request.data['tags'], end='\n\n\n')

        

        content = request.data.copy()

        content['tags'] = request.data.pop('tags')

        content['keywords'] = request.data.pop('keywords')

        content['tools'] = request.data.pop('tools')

        content["author"] = ObjectId(id)

        print(content,end='\n\n\n')

 

print(content)

    >>><QueryDict: {'title': ['제목입니다1'], 'description': ['설명란'], 'category': ['카테고리1값'], 'tags': [['태그1값', '태그2값', '태그3값']], 'tools': [['툴1값', '툴2값', '툴3값']], 'keywords': [['키워1값', '키워2값', '키워3']], 'image':[<InMemoryUploadedFile: PNG_transparency_demonstration_1.png (image/png)>, <InMemoryUploadedFile: png-clipart-snoopy.png (image/png)>], 'author': [ObjectId('6136e8c6b9962ef20687bc29')]}>

 

 

  • 이처럼 form-data형식은 첨부파일 형식을 제공하는 대신에 데이터 파싱에 어려움을 겪는다.

'개인 프로젝트' 카테고리의 다른 글

[쇼빌리티] 모델링 중  (0) 2020.12.01