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값을 여러번 주어서 리스트로 전달될 수 있었다.
기존 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 |
---|