Я пытаюсь настроить базовую форму колбы, но понимаю, что все, что я отправляю в форму, читается как строка:
from flask import blueprints, render_template
from flask import request
from wtforms import Form, DecimalField,
from wtforms.validators import NumberRange
class PredictionForm(Form):
inputfield = DecimalField("Impressions", validators=[NumberRange(min=0.0, max=1.0, message="Not valid")
anotherinput = DecimalField('View Rate', validators=[NumberRange(min=0.0, max=1.0, message="Not valid")])
@blueprint.route("/", methods=["POST", "GET"])
def index():
form = PredictionForm()
print(request.form)
print(form.validate()) # this always returns False!
if request.method == "POST":
print(request.form)
Когда я печатаю requests.form
, я получаю следующий вывод:
ImmutableMultiDict([('inputfield', '0'), ('anotherinput', '0.5'))])
Я думаю, именно поэтому моя проверка формы постоянно возвращает false, поскольку очевидно, что любое значение, являющееся строкой, не является числом от 0 до 1. Как заставить Flask распознавать мои входные значения как числа?
Если это НЕ причина того, что моя проверка не прошла, пожалуйста, дайте мне знать.
Примечание: я печатаю request.form
для отладки - так что я могу видеть, какой тип данных передается в мою форму. Я знаю, что могу четко проверить на стороне сервера, выполнив что-то вроде
input_field = request.form ['input_field']
если input_field.isnumber ():
... еще немного логики
Однако все это происходит на серверной стороне сервера. Весь смысл использования этих валидаторов Flask заключается в том, что мне не нужно выполнять эту проверку на стороне сервера. Например, если я изменю свою проверку для поля с именем spend
:
class PredictionForm(Form):
inputfield = DecimalField("Impressions", validators=[NumberRange(min=0.0, max=1.0, message="Not valid")
anotherinput = DecimalField('View Rate', validators=[NumberRange(min=0.0, max=1.0, message="Not valid")])
spend = DecimalField('Spend', validators=[DataRequired()])
Это прекрасно работает на моем веб-интерфейсе, так как, если я пытаюсь отправить свою форму без ввода затрат, я получаю это сообщение: