Как преобразовать данные ответа FORM в словарь Python в Flask? - PullRequest
0 голосов
/ 02 августа 2020

У меня есть следующие данные в формате POST

Заголовок: Content-Type: 'application/x-www-form-urlencoded':

Данные: 'field1=true&field2=false&field3=123'

На сервере flask с использованием response.form, дает следующий результат:

ImmutableMultiDict([('field1', 'true'), ('field2', 'false'), ('field3', '123')])

После выполнения: request.form.to_dict()

Результат: {'field1': 'true', 'field2': 'false', 'field3': '123'}

Есть ли способ преобразовать JSON логическое истина / ложь в Python логическое True / False ? Разве функция to_dict не должна преобразовывать их в python логические типы?

Словарь преобразуется, но истинное / ложное значение остается строкой.

Каков оптимальный способ добиться этого, кроме использования сравнения строк?

1 Ответ

1 голос
/ 02 августа 2020

Вам нужно будет marshal данные, т.е. ссылаться - https://flask-restful.readthedocs.io/en/latest/api.html.

In [11]: from flask_restful import fields, marshal

In [12]: data = {'field1': 'true', 'field2': 'false', 'field3': '123'}

In [13]: mfields = { 'field1':fields.Boolean, 'field2':fields.Boolean, 'field3':fields.Raw}

In [14]: marshal(data, mfields)
Out[14]: OrderedDict([('field1', True), ('field2', True), ('field3', '123')])

In [17]: dict(marshal(data, mfields))
Out[17]: {'field1': True, 'field2': True, 'field3': '123'}

Используйте библиотеку сериализации, такую ​​как Marshmallow для обработки формы data.

Изменить: если вы не знаете структуру формы заранее, вам придется преобразовать ее вручную, потому что true здесь строка. В противном случае можно было бы использовать json.loads.

In [18]: data
Out[18]: {'field1': 'true', 'field2': 'false', 'field3': '123'}

In [19]: {k: True if v == "true" else False if v == "false" else v for k,v in data.items()}
Out[19]: {'field1': True, 'field2': False, 'field3': '123'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...