Flask에서 POST 개체를 mongodb에 적합한 표현으로 변환합니다.
저는 플라스크와 몽고DB를 사용하고 있습니다.저는 요청 내용을 변환하려고 합니다.PyMongo를 통해 저장하기에 적합한 것으로 만듭니다.이미 만들어진 해결책이 있을 정도로 자주 나와야 할 것 같습니다.
플라스크가 내게 준 것은 다음과 같습니다.
ImmutableMultiDict([('default', u''), ('required': u'on'), ('name', u'short_text'), ('name', u'another'), ('submit', u'Submit')])
그리고 제가 얻고자 하는 것은 이것과 비슷한 것입니다.
{
'default': '',
'name': ['short_text', 'another'],
'required': true
}
>>> from werkzeug.datastructures import ImmutableMultiDict
>>> imd = ImmutableMultiDict([('default', u''), ('required', u'on'), ('name', u'short_text'), ('name', u'another'), ('submit', u'Submit')])
>>> imd.to_dict(flat=False)
>>> {'default': [''],
'name': ['short_text', 'another'],
'required': ['on'],
'submit': ['Submit']}
.to_dict(flat=False)
명심해야 할 것입니다.관련 설명서 참조
플라스크ImmutableMultiDict
데이터 구조가 내장되어 있음to_dict
방법.
플라스크 외에도 이 지식은request
물건form
재산이라는 것은ImmutableMultiDict
MongoDB에 대한 폼 POST 요청을 간단하게 처리할 수 있습니다.
단순한 예는 아래를 참조하십시오.
from flask import request
@app.route('/api/v1/account', methods=['POST'])
def create_account():
"""Create user account"""
account_dict = request.form.to_dict()
db.account.insert_one(account_dict)
werkzeug의 get list를 사용하여 다음과 같은 코드를 작성할 수 있습니다.
data = dict((key, request.form.getlist(key)) for key in request.form.keys())
이제 각 키의data
하나 이상의 요소를 포함하는 목록이 될 것입니다.형식에 맞는 결과를 얻으려면 다음을 수행합니다.
data = dict((key, request.form.getlist(key) if len(request.form.getlist(key)) > 1 else request.form.getlist(key)[0]) for key in request.form.keys())
각 키에 대해 3개의 호출이 있기 때문에 비효율적입니다.request.form.getlist(key)
루프를 작성하고 우회할 수 있습니다.
request.form.to_dict()
당신이 필요로 하는 것을 양보할 것입니다.
의 비교dict()
그리고..to_dict()
python 버전 3.6 이전 및 이후의 메서드입니다.
from werkzeug.datastructures import ImmutableMultiDict
imd = ImmutableMultiDict([('default', u''), ('required', u'on'), ('name', u'short_text'), ('name', u'another'), ('submit', u'Submit')])
till python 3.5
dict(imd)
#output: {'default': [''], 'required': ['on'], 'name': ['short_text', 'another'], 'submit': ['Submit']}
imd.to_dict(flat=false)
#output: {'default': [''], 'required': ['on'], 'name': ['short_text', 'another'], 'submit': ['Submit']}
imd.to_dict(flat=True) # or imd.to_dict()
#output: {'default': '', 'required': 'on', 'name': 'short_text', 'submit': 'Submit'}
따라서,
dict(imd) == imd.to_dict(flat=False)
#output: True
python 3.6 이후 버전
dict(imd)
#output: {'default': '', 'required': 'on', 'name': 'short_text', 'submit': 'Submit'}
imd.to_dict(flat=false)
#output: {'default': [''], 'required': ['on'], 'name': ['short_text', 'another'], 'submit': ['Submit']}
imd.to_dict(flat=True) # or imd.to_dict()
#output: {'default': '', 'required': 'on', 'name': 'short_text', 'submit': 'Submit'}
따라서,
dict(imd) == imd.to_dict(flat=False)
#output: False
사용..to_dict()
와 함께flat=True/False
더 안전한 옵션입니다.
>>> from werkzeug.datastructures import ImmutableMultiDict
>>> so = ImmutableMultiDict([('default', u''), ('required', u'on'), ('name', u'short_text'), ('name', u'another'), ('submit', u'Submit')])
# Most earlier answers have comments suggesting so.to_dict()
# It doesn't work, duplicates are lost like in a normal dict
>>> so.to_dict()
{'default': '', 'required': 'on', 'name': 'short_text', 'submit': 'Submit'}
# The response by Vb407 is better but litters lists everywhere
>>> dso = dict(so)
{'default': [''], 'required': ['on'], 'name': ['short_text', 'another'], 'submit': ['Submit']}
# We can achieve the requested state by cleaning this up
>>> { k: dso[k][0] if len(dso[k]) <= 1 else dso[k] for k in dso }
{'default': '', 'required': 'on', 'name': ['short_text', 'another'], 'submit': 'Submit'}
언급URL : https://stackoverflow.com/questions/13522137/in-flask-convert-form-post-object-into-a-representation-suitable-for-mongodb
'programing' 카테고리의 다른 글
16진수 편집기를 통한 Excel VBA 암호 (0) | 2023.05.21 |
---|---|
C++용 NumPy 스타일 어레이? (0) | 2023.05.21 |
서버와 동등한 것은 무엇입니까?ASP.NET Core의 MapPath? (0) | 2023.05.21 |
Azure AD App 애플리케이션 권한 대 위임된 권한 (0) | 2023.05.21 |
안전 영역 레이아웃을 프로그래밍 방식으로 사용하는 방법은 무엇입니까? (0) | 2023.05.21 |