Маршрутизация для нескольких переменных в строке запроса

#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') and age = request.args.get('age') ?

2. @b.j.g: точно. Вы можете указать, что age это должен быть Python int : age = request.args.get('age', type=int) и он будет преобразован, если это возможно, или возвращен None , если нет.

3. Спасибо за вашу помощь.