#python #flask #wtforms #flask-class-views
#python #flask #wtforms
Вопрос:
Я создал эту простую веб-страницу с помощью Flask.
Вместо использования HTML-виджетов, таких как для формы, я использовал библиотеку Flask WTForm, которая позволяет вам писать виджеты формы из кода Python. Вот мой код на Python:
from flask import Flask, render_template
from wtforms import Form,StringField, SubmitField
from flask.views import View, MethodView
app = Flask(__name__)
class SquareForm(Form):
side = StringField('Side of the square')
button = SubmitField("Calculate")
class HomePage(MethodView):
def get(self):
return render_template('index2.html', square_form=square_form)
def post(self):
square_area = square_form.side.data * 2
return render_template('index2.html', square_form=square_form, result = square_area)
# Create a view function for HomePage class
home_page = HomePage.as_view('home_page')
app.add_url_rule('/', view_func=home_page)
app.add_url_rule('/result', view_func=home_page, methods=['POST'])
square_form = SquareForm()
if __name__ == "__main__":
app.run(debug=True)
И это мой index.html код:
<form method="POST" action="/result">
{{ square_form.side.label }}: {{ square_form.side() }}
{{square_form.button()}}
{{result}}
</form>
Я запускаю код и ввожу 5
в поле ввода HTML, но получаю сообщение об ошибке:
File "/Users/folder/main.py", line 18, in post
square_area = square_form.side.data * 2
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
Очевидно, что ошибка типа возникает из-за square_form.side.data
is None
. Я ожидаю square_form.side.data
'5'
, что вместо этого. Как я могу этого добиться?
Ответ №1:
Оказывается, форму нужно было инициализировать внутри метода post с request.form
аргументом:
from flask import request
def post(self):
square_form = SquareForm(request.form)
square_area = square_form.side.data * 2
return render_template('index2.html', square_form=square_form, result = square_area)