I have a form that posts a personId
int to Flask. However, request.form['personId']
returns a string. Why isn't Flask giving me an int?
I tried casting it to an int, but the route below either returned a 400 or 500 error. How can I get I get the personId
as an int in Flask?
@app.route('/getpersonbyid', methods = ['POST']) def getPersonById(): personId = (int)(request.form['personId']) print personId
To convert, or cast, a string to an integer in Python, you use the int() built-in function. The function takes in as a parameter the initial string you want to convert, and returns the integer equivalent of the value you passed.
In the <form> tag, you set the method attribute to post so the form data gets sent to the server as a POST request. In the form, you have a text input field named title ; this is the name you'll use on the application to access the title form data. You give the <input> tag a value of {{ request.
HTTP form data is a string, Flask doesn't receive any information about what type the client intended each value to be. So it parses all values as strings.
You can call int(request.form['personId'])
to get the id as an int. If the value isn't an int though, you'll get a ValueError
in the log and Flask will return a 500 response. And if the form didn't have a personId
key, Flask will return a 400 error.
personId = int(request.form['personId'])
Instead you can use the MultiDict.get()
method and pass type=int
to get the value if it exists and is an int:
personId = request.form.get('personId', type=int)
Now personId
will be set to an integer, or None
if the field is not present in the form or cannot be converted to an integer.
There are also some issues with your example route.
A route should return
something, otherwise it will raise a 500 error. print
outputs to the console, it doesn't return a response. For example, you could return the id again:
@app.route('/getpersonbyid', methods = ['POST']) def getPersonById(): personId = int(request.form['personId']) return str(personId) # back to a string to produce a proper response
The parenthesis around int
are not needed in Python and in this case are ignored by the parser. I'm assuming you are doing something meaningful with the personId
value in the view; otherwise using int()
on the value is a little pointless.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With