Python Flask ¿cómo obtener parámetros de una URL?
En Flask, ¿Cómo puedo extraer parámetros de una URL? ¿Cómo puedo extraer parámetros con nombre de una URL usando flask y python?
Cuando el usuario accede a esta URL que se ejecuta en mi aplicación flask, quiero que el servicio web sea capaz de manejar los parámetros especificados después del signo de interrogación:
http://10.1.1.1:5000/login?username=alex&password=pw1
#I just want to be able to manipulate the parameters
@app.route('/login', methods=['GET', 'POST'])
def login():
username = request.form['username']
print(username)
password = request.form['password']
print(password)
4 answers
Uso request.args
para obtener el contenido analizado de la cadena de consulta:
from flask import request
@app.route(...)
def login():
username = request.args.get('username')
password = request.args.get('password')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-28 15:50:29
Los parámetros de URL están disponibles en request.args
, que es un MultiDict que tiene un método get
, con parámetros opcionales para el valor predeterminado (default
) y el tipo (type
) - que es un llamable que convierte el valor de entrada al formato deseado.
from flask import request
@app.route('/my-route')
def my_route():
page = request.args.get('page', default = 1, type = int)
filter = request.args.get('filter', default = '*', type = str)
Ejemplos con el código anterior:
/my-route?page=34 -> page: 34 filter: '*'
/my-route -> page: 1 filter: '*'
/my-route?page=10&filter=test -> page: 10 filter: 'test'
/my-route?page=10&filter=10 -> page: 10 filter: '10'
/my-route?page=*&filter=* -> page: 1 filter: '*'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-20 11:41:27
También puede usar corchetes en la URL de la definición de vista y esta entrada irá a sus argumentos de función de vista
@app.route('/<name>')
def my_view_func(name):
return name
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-14 00:29:48
Si tiene un solo argumento pasado en la URL, puede hacerlo de la siguiente manera
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)
En caso de que tenga múltiples parámetros:
#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)
Lo que estaba tratando de hacer funciona en caso de solicitudes POST donde los parámetros se pasan como parámetros de formulario y no aparecen en la URL. En caso de que realmente esté desarrollando una API de inicio de sesión, es aconsejable que use POST request en lugar de GET y exponer los datos al usuario.
En caso de solicitud post, funcionaría como sigue:
#url
http://10.1.1.1:5000/login
Fragmento HTML:
<form action="http://10.1.1.1:5000/login">
Username : <input type="text" name="username"><br>
Password : <input type="password" name="password"><br>
<input type="submit" value="submit">
</form>
Ruta:
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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-17 15:18:54