46

personId私はFlaskにintを投稿するフォームを持っています。ただし、request.form['personId']文字列を返します。フラスコが私にintを与えないのはなぜですか?

それをintにキャストしようとしましたが、以下のルートは400または500エラーを返しました。personIdFlaskでintとして取得するにはどうすればよいですか?

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

1 に答える 1

63

HTTPフォームデータは文字列です。Flaskは、クライアントが各値を意図したタイプに関する情報を受け取りません。したがって、すべての値を文字列として解析します。

int(request.form['personId'])idをintとして取得するために呼び出すことができます。ただし、値がintでない場合はValueError、ログにaが記録され、Flaskは500応答を返します。また、フォームにキーがない場合personId、Flaskは400エラーを返します。

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

代わりに、MultiDict.get()メソッドとパスtype=intを使用して、値が存在し、intである場合に値を取得できます。

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

personIdこれで整数に設定されます。または Noneフィールドがフォームに存在しないか、整数に変換できない場合。


ルートの例にもいくつかの問題があります。

ルートは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

Pythonでは括弧intは不要であり、この場合、パーサーは無視します。personIdビューの値で何か意味のあることをしていると思います。そうでなければint()、値に使用することは少し無意味です。

于 2012-09-23T10:29:50.167 に答える