6

Как получить именованные параметры из URL с помощью Flask?

7

Описание проблемы:

Когда пользователь обращается к следующему URL в моем Flask приложении, я хочу, чтобы веб-сервис обрабатывал параметры, указанные после знака вопроса:

http://10.1.1.1:5000/login?username=alex&password=pw1

Я просто хочу иметь возможность манипулировать этими параметрами.

Вот мой код:

@app.route('/login', methods=['GET', 'POST'])
def login():
    username = request.form['username']
    print(username)
    password = request.form['password']
    print(password)

Однако в текущей реализации я не получаю значения параметров username и password, так как обращаюсь к request.form. Как мне правильно загружать параметры из URL?

3 ответ(ов)

2

Вы также можете использовать угловые скобки <> в URL-адресе определения представления, и данный ввод будет передан в аргументы вашей функции представления. Вот пример:

@app.route('/<name>')
def my_view_func(name):
    return name

В этом случае, если вы перейдете по URL, например, /Alice, функция my_view_func получит строку "Alice" в качестве аргумента name и вернет её.

0

Если у вас есть один аргумент, переданный в URL, вы можете сделать это следующим образом:

from flask import request
# URL
http://10.1.1.1:5000/login/alex

from flask import request
@app.route('/login/<username>', methods=['GET'])
def login(username):
    print(username)

Если у вас несколько параметров:

# URL
http://10.1.1.1:5000/login?username=alex&password=pw1

from flask import request
@app.route('/login', methods=['GET'])
def login():
    username = request.args.get('username')
    print(username)
    password = request.args.get('password')
    print(password)

То, что вы пытались сделать, сработает в случае POST-запросов, когда параметры передаются как данные формы и не отображаются в URL. Если вы разрабатываете API для входа, рекомендуется использовать POST-запросы вместо GET, чтобы не подвергать данные пользователей риску.

В случае POST-запроса это будет работать следующим образом:

# URL
http://10.1.1.1:5000/login

Фрагмент HTML:

<form action="http://10.1.1.1:5000/login" method="POST">
  Username : <input type="text" name="username"><br>
  Password : <input type="password" name="password"><br>
  <input type="submit" value="submit">
</form>

Маршрут:

from flask import request
@app.route('/login', methods=['POST'])
def login():
    username = request.form.get('username')
    print(username)
    password = request.form.get('password')
    print(password)

Таким образом, для обработки логина лучше использовать POST-запросы, так как они более безопасны для передачи конфиденциальной информации, такой как пароль.

0

Чтобы ответить на ваш вопрос, в приведенном коде используется Flask для создания маршрута, который обрабатывает запросы на адрес http://0.0.0.0:5000/user/name/. Давайте разберем данный код:

@app.route('/user/<string:name>/', methods=['GET', 'POST'])
def user_view(name):
    print(name)
  1. Декоратор @app.route создает маршрут с динамической частью <string:name>, что означает, что Flask будет принимать любой текст после /user/ как параметр name. Например, если вы сделаете запрос к /user/Alice/, то переменная name в функции user_view будет равна "Alice".

  2. Функция user_view принимает один параметр name, который автоматически заполняется значением из URL. Внутри функции мы просто выводим это значение на консоль с помощью print(name).

  3. Метод GET позволяет получать данные, а метод POST - отправлять данные на сервер. В данном случае, вы можете как получать данные, так и отправлять их на указанном маршруте.

Таким образом, чтобы увидеть результат работы данной функции, вам нужно сделать запрос (например, с помощью браузера или инструмента вроде Postman) на адрес http://0.0.0.0:5000/user/<имя>/, и значение <имя> отобразится в консоли вашего сервера.

Надеюсь, это поможет понять, как работает данный кусок кода! Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь