Как получить переменные GET в приложении для бутылок Python

Я пытаюсь сделать простой REST API, используя приложение для бутылок Python. Я столкнулся с проблемой получения переменных GET из глобального объекта запроса. Любые предложения, как получить это из запроса GET?


person Maanas Royy    schedule 23.10.2012    source источник


Ответы (4)


Они хранятся в объекте request.query.

http://bottlepy.org/docs/dev/tutorial.html#query-variables

Похоже, вы также можете получить к ним доступ, рассматривая атрибут request.query как словарь:

request.query['city']

Таким образом, dict(request.query) создаст словарь всех параметров запроса.

Как отмечает @mklauber, это не сработает для многобайтовых символов. Похоже, лучший метод:

my_dict = request.query.decode()

or:

dict(request.query.decode())

иметь объект dict вместо объекта <bottle.FormsDict object at 0x000000000391B...>.

person Nathan Villaescusa    schedule 23.10.2012
comment
Обратите внимание, что, судя по документам, доступ на основе dict неправильно декодирует и перекодирует многобайтовые символы. - person mklauber; 24.10.2012
comment
Ах, да, кажется, что my_dict = request.query.decode() правильный путь. - person Nathan Villaescusa; 24.10.2012

Если вы хотите их все:

from urllib.parse import parse_qs

dict = parse_qs(request.query_string)

Если вы хотите один:

one = request.GET.get('one', '').strip()
person f p    schedule 23.10.2012
comment
или вы могли бы просто использовать request.query.one - person jfs; 24.10.2012
comment
@f p: он возвращает пустую строку, а также ваш код. Единственное отличие состоит в том, что request.query.one всегда является строкой Unicode. - person jfs; 24.10.2012

Можете ли вы попробовать это, пожалуйста:

Для этого примера: http://localhost:8080/command?param_name=param_value

В вашем коде:

param_value = request.query.param_name
person madkabx    schedule 02.09.2016

из документов

name = request.cookies.name
# is a shortcut for:
name = request.cookies.getunicode('name') # encoding='utf-8' (default)
# which basically does this:
try:
    name = request.cookies.get('name', '').decode('utf-8')
except UnicodeError:
    name = u''

Таким образом, вы можете предпочесть использовать метод доступа к атрибуту (request.query.variable_name), а не request.query.get('variable_name')

Еще один момент: вы можете использовать request.params.variable_name, который работает как для методов GET, так и для POST, вместо того, чтобы переключать request.query.variable_name или request.forms.variable_name в зависимости от GET/POST.

person comte    schedule 25.01.2019