하나가 아닌 여러개의 값을 서버에서 받아 MongoDB에 저장하려고 합니다. 예를들어 다수의 글이나 목록 등을 저장하려면 어떻게하면 될까요? 먼저 클라이언트의 요청을 서버에 전달해야합니다. 만약 request로 데이터를 전달할때 다수의 값은 어떻게 받을 수 있을까요?

# Python flask에서 배열로 값을 전달받기

items로 전달된 값을 우리는 배열로 받아 저장해야합니다. 하나가 아니니까요... 원래 하나의 값은 아래처럼 받았었죠.
request.form.get('item')


하지만 이번에는 다수의 값이므로 배열로 받아 처리해야합니다. 아래 코드처럼 getgetlist로 변경하여 수행합니다. 참고로 Django에서는 getList를 사용합니다. 이처럼 배열로 받는 경우는 여러개의 파일을 첨부하여 처리할때도 같은 방법이 사용되죠! 이제 배열로 받기 위해서 아래와 같은 코드를 사용합니다.
request.form.getlist('item[]')


이제 다수의 값들을 배열로 받아 저장하는 것이 가능해집니다. 그렇다면  간단한 예제를 통해서 아래에서 알아보겠습니다.



# Python flask 배열로 전달받는 방법 예제보기
만약 전달된 값이 여러개로 배열인 경우입니다. 가장 간단한 경우로 아래처럼 예제를 만들어봅니다.
items = [1, 2, 3];

이를 전달받기 위해서 아래와 같이 Python에서 선언하여 사용할 수 있습니다.
value = request.form.getlist('items[]')

이제 value에는 전달받은 파라미터값이 배열로 저장되게 됩니다.


! 전달받은 값이 여러개의 프로퍼티 값을 가진 배열인 경우
아래는 또 다른 예제입니다. 이번에는 여러 프로퍼티를 가진 객체에 대하여 예제입니다.
items = [
  {
    id: 1,
    name: 'web'
    rank: 1
  },
  {
    id: 2,
    name: 'is',
    rank: 2
  }
  ...
]

이처럼 여러개의 배열에 담긴 또 여러개의 객체를 MongoDB에 저장해야합니다. 이를 저장할 경우 배열로 전달받은 값을 loop를 사용하여 하나씩 MongoDB의 컬렉션에 저장합니다.
collection = db.testList
request.form.getlist('items')
for item in items:
  item = eval(item)
  collection.insert_one(item)

return 'okay'

위에서 eval() 함수는 스트링을 dict 또는 list로 변경해줍니다. 배열로 다수의 값은 서버에서 받았지만 그 안의 객체는 string이므로 eval()을 사용하여 변환해야합니다.

여기까지 모두 끝이 났습니다. 우리의 목적인 다수의 데이터 값이 MongoDB에 저장되었습니다.



# 마치면서여기까지 다수의 파라미터값을 배열로 전달받아 MongoDB에서 처리하는 방법을 알아보았습니다. 위에보면 eval() 함수를 사용하였는데 이는 파싱을 통해 문자열을 딕셔너리나 아니면 리스트 형태로 변환해줍니다. 자세한 내용은 아래 링크에서 참고하세요!

eval() 함수 바로가기 >
https://webisfree.com/2017-11-21/python-string-dict-또는-list-바꾸는-방법-eval()