web-dev-qa-db-fra.com

Obtenez plusieurs paramètres de requête du même nom

Mon problème est que avec le code donné:

from flask import Flask, request

app = Flask(__name__)

@app.route("/")
def hello():
    return str(request.values.get("param", "None"))

app.run(debug=True)

et je visite:

http://localhost:5000/?param=a&param=bbb

Je devrais m'attendre à une sortie de ['a', 'bbb'] sauf que Flask ne semble accepter que le premier paramètre et ignorer le reste.

Est-ce une limitation de Flask? Ou est-ce à dessein?

35
John Jiang

Vous pouvez utiliser getlist, qui est similaire à getList de Django, mais pour une raison quelconque, il n'est pas mentionné dans la documentation de Flask:

return str(request.args.getlist('param'))

Le résultat est:

[u'a', u'bbb']

Utilisez request.args si le paramètre est dans la chaîne de requête (comme dans la question), request.form si les valeurs proviennent de plusieurs entrées de formulaire portant le même nom. request.values combine les deux, mais devrait normalement être évité pour la collection plus spécifique.

67
Blender

Si vous avez utilisé $('form').serialize() dans jQuery pour encoder les données de votre formulaire, vous pouvez utiliser request.form['name'] pour obtenir des données, mais lorsque les noms de plusieurs éléments d'entrée sont identiques, request.form['name'] n'obtient que le premier élément correspondant. J'ai donc vérifié l'objet de formulaire à partir de l'API Flask et j'ai trouvé this . Ensuite, j'ai vérifié l'objet MultiDict , et j'ai trouvé la fonction getlist('name').

Si plusieurs entrées portent le même nom, essayez cette méthode: request.form.getlist['name']

1
Vin

Une autre méthode consiste à utiliser une clé et une valeur qui contiennent plusieurs valeurs, puis sur le serveur, vous pouvez scinder et faire ce que vous voulez. Espérons que cela aide quelqu'un

http://localhost/api/products/filters?Manufacturer=Dell|HP|HUAWEI|Lenovo

OR

http://localhost/api/products/filters?Manufacturer=Dell_HP_HUAWEI_Lenovo

OR

http://localhost/api/products/filters?Manufacturer=Dell__HP__HUAWEI__Lenovo
0
user7956520