【问题标题】:How to extract values from the WTForm fields in Python?如何从 Python 中的 WTForm 字段中提取值?
【发布时间】:2020-10-20 15:11:55
【问题描述】:

我用 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>

我运行代码并在HTML输入框中输入5,但出现错误:

  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'

很明显,TypeError 发生是因为square_form.side.dataNone。我希望 square_form.side.data 改为 '5'。我怎样才能做到这一点?

【问题讨论】:

    标签: python flask wtforms


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2015-07-09
      • 2020-04-26
      • 1970-01-01
      • 2017-06-11
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      相关资源
      最近更新 更多