#python #flask
#python #flask
Вопрос:
Мне трудно понять, как извлекать переменные из строки запроса в flask. Я почти уверен, что этот синтаксис неправильный, но может кто-нибудь помочь мне понять, как получить несколько переменных из строки запроса?
@restServer.route('/end_point/<foo>amp;<bar>')
def like_provider(self,foo,bar):
Какой синтаксис я должен использовать при отправке данных?
http://url/fooamp;bar
или
http://url/var=fooamp;var2=bar
Во втором случае, как мне написать код маршрутизации в Flask?
Ответ №1:
URL-адрес, о котором должно заботиться ваше представление, состоит из двух частей: URL-путь и строка запроса. Оба ваших примера — это просто элементы пути, на самом деле строка запроса — это все, что после ?
.
Это действительно зависит от того, как предполагается взаимодействовать с вашим веб-приложением; URL-адрес обычно представляет один ресурс, а строка запроса представляет, ну, запрос к этому ресурсу.
Сравните /users/102324
с /users?name=Joe Soap
; первый представляет одного пользователя (с идентификатором 102323
, последний URL-адрес предназначен для всех пользователей, но включает поиск пользователей, соответствующих заданному имени.
Путь — это та часть, которую вы сопоставляете с конфигурацией маршрута; она точно соответствует вашему шаблону; для ваших двух примеров заполнители foo
and bar
захватывают все (кроме /
символа); поэтому оба ваших URL-адреса будут работать и просто приведут к разным значениям для foo
и bar
:
http://url/end_point/fooamp;bar -> {'foo': 'foo', 'bar': 'bar'}
http://url/end_point/var=fooamp;var2=bar -> {'foo': 'var=foo', 'bar': 'var2=bar'}
Но обычно вы не используете amp;
URL-адрес в пути.
Строка запроса, с другой стороны, анализируется на пары ключ-значение и может быть доступна с помощью request.query
объекта:
@route('/end_point')
def like_provider(self):
foo = request.args.get('foo')
bar = request.args.get('bar')
Комментарии:
1. Итак, для обработки
/users?name=Joe Soapamp;age=21
я бы обращался к переменным с помощьюname = request.args.get('name')
andage = request.args.get('age')
?2. @b.j.g: точно. Вы можете указать, что
age
это должен быть Pythonint
:age = request.args.get('age', type=int)
и он будет преобразован, если это возможно, или возвращенNone
, если нет.3. Спасибо за вашу помощь.