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
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.