一尘不染

将Flask表单值转换为int

json

我有一个表格,personId可以向Flask发送一个int值。但是,request.form['personId']返回一个字符串。Flask为什么不给我一个整数?

我尝试将其强制转换为int,但是下面的路由返回了400或500错误。如何获得personIdFlask中的int类型?

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

阅读 222

收藏
2020-07-27

共1个答案

一尘不染

HTTP表单数据是一个字符串,Flask不会收到有关客户端将每个值指定为哪种类型的任何信息。因此,它将所有值解析为字符串。

您可以调用int(request.form['personId'])以获取ID作为一个整数。如果该值不是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将被设置为整数, 或者 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()该值将毫无意义。

2020-07-27