Как получить именованные параметры из URL с помощью Flask?
Описание проблемы:
Когда пользователь обращается к следующему 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 ответ(ов)
Вы также можете использовать угловые скобки <>
в URL-адресе определения представления, и данный ввод будет передан в аргументы вашей функции представления. Вот пример:
@app.route('/<name>')
def my_view_func(name):
return name
В этом случае, если вы перейдете по URL, например, /Alice
, функция my_view_func
получит строку "Alice"
в качестве аргумента name
и вернет её.
Если у вас есть один аргумент, переданный в 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-запросы, так как они более безопасны для передачи конфиденциальной информации, такой как пароль.
Чтобы ответить на ваш вопрос, в приведенном коде используется Flask для создания маршрута, который обрабатывает запросы на адрес http://0.0.0.0:5000/user/name/
. Давайте разберем данный код:
@app.route('/user/<string:name>/', methods=['GET', 'POST'])
def user_view(name):
print(name)
Декоратор
@app.route
создает маршрут с динамической частью<string:name>
, что означает, что Flask будет принимать любой текст после/user/
как параметрname
. Например, если вы сделаете запрос к/user/Alice/
, то переменнаяname
в функцииuser_view
будет равна "Alice".Функция
user_view
принимает один параметрname
, который автоматически заполняется значением из URL. Внутри функции мы просто выводим это значение на консоль с помощьюprint(name)
.Метод
GET
позволяет получать данные, а методPOST
- отправлять данные на сервер. В данном случае, вы можете как получать данные, так и отправлять их на указанном маршруте.
Таким образом, чтобы увидеть результат работы данной функции, вам нужно сделать запрос (например, с помощью браузера или инструмента вроде Postman) на адрес http://0.0.0.0:5000/user/<имя>/
, и значение <имя>
отобразится в консоли вашего сервера.
Надеюсь, это поможет понять, как работает данный кусок кода! Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать.
Возврат JSON-ответа из представления Flask
Как обслуживать статические файлы в Flask
Как получить значения GET-запроса в Django?
Преобразование списка словарей в DataFrame pandas
Как отменить последнюю миграцию?