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¶m=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?
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.
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']
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
http://localhost/api/products/filters?Manufacturer=Dell_HP_HUAWEI_Lenovo
http://localhost/api/products/filters?Manufacturer=Dell__HP__HUAWEI__Lenovo