#python #flask #python-requests #args
#python #flask #python-запросы #аргументы
Вопрос:
Я пытаюсь сгенерировать фильтр для SQL alchemy DB. Я могу правильно выполнить запрос и получить желаемый результат, однако мне нужно правильно получать запросы и соответствующим образом их форматировать.
Я нажимаю URL, как:
http://localhost:3000/books?filter=price,eq,37amp;filter=code,eq,50
Когда я получаю аргументы, они выглядят как:
ImmutableMultiDict([('filter', 'price,eq,37'), ('filter', 'code,eq,50')])
Но чего я действительно хочу, так это:
{"filter": ["price,eq,37", "code,eq,50"]}
Получение запроса, подобного:
@app.route('/books', methods=['GET'])
def books() -> str:
args = request.args
print(args)
Любая помощь будет с благодарностью.
Ответ №1:
Вы можете передать flat=False
параметр request.args.to_dict()
методу для получения нескольких значений запроса для одного ключа.
Пример:
@app.route('/')
def index():
query_params = request.args.to_dict(flat=False)
# print(query_params)
return query_params
Пожалуйста, поддержите решение, если оно окажется полезным.
Ответ №2:
Метод lists()
возвращает итерацию (key, values)
:
dict(request.args.lists()) # returns {"filter": ["price,eq,37", "code,eq,50"]}
Метод getlist()
возвращает все значения ключа:
request.args.getlist('filter') # returns ["price,eq,37", "code,eq,50"]
Комментарии:
1. Это возвращает — ImmutableMultiDict([(‘filter’, ‘defense, eq,37’), (‘filter’, ‘attack, eq,50’)]). Я бы хотел {«filter»: [«price, eq,37», «code, eq,50»]}