Ответ 1
Данные формы HTTP - это строка, Flask не получает никакой информации о том, какого типа клиент подразумевает каждое значение. Таким образом, он анализирует все значения как строки.
Вы можете позвонить int(request.form['personId'])
, чтобы получить идентификатор как int. Если значение не является целым, вы получите ValueError
в журнале, а Flask вернет ответ 500. И если в форме не было клавиши personId
, Flask вернет ошибку 400.
personId = int(request.form['personId'])
Вместо этого вы можете использовать метод MultiDict.get()
и передать type=int
, чтобы получить значение, если оно существует и является целым:
personId = request.form.get('personId', type=int)
Теперь personId
будет установлен в целое число, или None
, если поле отсутствует в форме или не может быть преобразовано в целое число.
Также есть некоторые проблемы с вашим примером маршрута.
Маршрут должен что-то return
, иначе он выдаст ошибку 500. print
выводит на консоль, он не возвращает ответ. Например, вы можете вернуть идентификатор еще раз:
@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()
для значения немного бессмысленно.