Подтвердить что ты не робот

Значение формы формы фляги для int

У меня есть форма, которая отправляет personId int в Flask. Однако request.form['personId'] возвращает строку. Почему Flask не дает мне int?

Я попытался привести его к типу int, но маршрут ниже вернул ошибку 400 или 500. Как я могу получить personId как int во Flask?

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

Ответ 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() для значения немного бессмысленно.