web-dev-qa-db-fra.com

Cast Flask value form to int

J'ai un formulaire qui affiche un personId int dans Flask. Toutefois, request.form['personId'] renvoie une chaîne. Pourquoi Flask ne me donne-t-il pas un int?

J'ai essayé de le convertir en int, mais l'itinéraire ci-dessous a retourné une erreur 400 ou 500. Comment puis-je obtenir le personId en tant qu'int dans Flask?

@app.route('/getpersonbyid', methods = ['POST'])
def getPersonById():
    personId = (int)(request.form['personId'])
    print personId
42
Amritha Dilip

Les données du formulaire HTTP sont une chaîne, Flask ne reçoit aucune information sur le type que le client voulait que chaque valeur soit. Il analyse donc toutes les valeurs sous forme de chaînes.

Vous pouvez appeler int(request.form['personId']) pour obtenir l'id sous forme d'int. Si la valeur n'est pas un entier, vous obtiendrez un ValueError dans le journal et Flask renverra une réponse 500. Et si le formulaire n'avait pas de personId clé, Flask renverra une erreur 400.

personId = int(request.form['personId'])

Au lieu de cela, vous pouvez utiliser la méthode MultiDict.get() et passer type=int Pour obtenir la valeur si elle existe et est un entier:

personId = request.form.get('personId', type=int)

Maintenant personId sera défini sur un entier, ou None si le champ n'est pas présent dans le formulaire ou ne peut pas être converti en un entier.


Il existe également des problèmes avec votre exemple d'itinéraire.

Un itinéraire devrait return quelque chose, sinon il générera une erreur 500. print sort sur la console, il ne retourne pas de réponse. Par exemple, vous pouvez renvoyer l'identifiant à nouveau:

@app.route('/getpersonbyid', methods = ['POST'])
def getPersonById():
    personId = int(request.form['personId'])
    return str(personId)  # back to a string to produce a proper response

Les parenthèses autour de int ne sont pas nécessaires dans Python et dans ce cas sont ignorés par l'analyseur. Je suppose que vous faites quelque chose de significatif avec le personId dans la vue, sinon utiliser int() sur la valeur est un peu inutile.

50
Martijn Pieters