FlaskにpersonId
intを投稿するフォームがあります。しかしながら、 request.form['personId']
は文字列を返します。なぜFlaskがintを与えないのですか?
Intにキャストしようとしましたが、下のルートが400または500エラーを返しました。 FlaskでpersonId
をintとして取得するにはどうすればよいですか?
@app.route('/getpersonbyid', methods = ['POST'])
def getPersonById():
personId = (int)(request.form['personId'])
print personId
HTTPフォームデータは文字列です。Flaskは、クライアントが各値を意図したタイプに関する情報を受け取りません。したがって、すべての値を文字列として解析します。
int(request.form['personId'])
を呼び出して、IDをintとして取得できます。ただし、値がintでない場合は、ログにValueError
が記録され、Flaskは500応答を返します。フォームにpersonId
キーがなかった場合、Flaskは400エラーを返します。
_personId = int(request.form['personId'])
_
代わりに MultiDict.get()
メソッド を使用し、_type=int
_を渡して値が存在し、intである場合に値を取得できます。
_personId = request.form.get('personId', type=int)
_
これで、personId
が整数に設定されますorNone
は、フォームにフィールドが存在しないか、整数に変換できない場合。
サンプルルートにはいくつかの問題もあります。
ルートにはreturn
何かが必要です。そうでない場合、500エラーが発生します。 print
はコンソールに出力しますが、応答を返しません。たとえば、再びIDを返すことができます。
_@app.route('/getpersonbyid', methods = ['POST'])
def getPersonById():
personId = int(request.form['personId'])
return str(personId) # back to a string to produce a proper response
_
int
を囲む括弧はPythonでは必要ありません。この場合、パーサーは無視します。ビューでpersonId
値を使用して意味のあることをしていると仮定しています。それ以外の場合、値でint()
を使用しても少し無意味です。