web-dev-qa-db-ja.com

Cast Flask form value to int

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
42
Amritha Dilip

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()を使用しても少し無意味です。

50
Martijn Pieters