46

我有一个将personIdint 发布到 Flask 的表单。但是,request.form['personId']返回一个字符串。为什么 Flask 不给我一个 int 值?

我尝试将其转换为 int,但下面的路由返回 400 或 500 错误。我怎样才能personId在 Flask 中获得 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

intPython 中不需要括号,在这种情况下,解析器会忽略括号。我假设您正在personId对视图中的值做一些有意义的事情;否则int()在值上使用有点毫无意义。

于 2012-09-23T10:29:50.167 回答