带表格的倒数

2024-03-28 10:45:02 发布

您现在位置:Python中文网/ 问答频道 /正文

在过去的几天里,我想是时候问问别人了。 基本上,我想用WTForms在Flask中做一个倒数猜测器,但我遇到了一个问题,它只工作一次:即提交表单只产生一次结果。
我已经没有主意了。如有任何提示,我们将不胜感激:)

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import SubmitField, HiddenField


app = Flask(__name__)
app.config['SECRET_KEY'] = "SoSecret"

class GuessForm(FlaskForm):

    min_a = 0
    max_a = 1000
    guess = int((max_a - min_a) / 2) + int(min_a)

    pred = SubmitField(guess)
    more = SubmitField('more')
    less = SubmitField('less')
    gjob = SubmitField('gjob')
    minn = HiddenField('min', default=min_a)
    maxx = HiddenField('max', default=max_a)

@app.route('/form', methods=['GET', 'POST'])
def form():

        form = GuessForm()

        render_template("form.html", form=form)

        if form.more.data and form.validate():
            form.max_a = form.guess
            form.guess = int((form.max_a - form.min_a) / 2) + int(form.min_a)
            return render_template("form.html", form=form)
        elif form.less.data:
            pass
        elif form.gjob.data:
            pass
        return render_template("form.html", form=form)


if __name__ == '__main__':
    app.run(debug=True)

以及html文件:

<body>

    <form method='POST' action='{{ url_for('form') }}'>
        {{ form.csrf_token }}
        I guess the number is {{ form.guess }}
        {{ form.more }}
        {{ form.less }}
        {{ form.gjob }}
        {{ form.minn }}
        {{ form.maxx }}
    </form>
</body>

Tags: fromformappflaskhtmlmoretemplaterender
1条回答
网友
1楼 · 发布于 2024-03-28 10:45:02

问题是,在计算下一个猜测时,您只使用静态值,而从不使用用户输入的按钮!你知道吗

class GuessForm(FlaskForm):

    min_a = 0
    max_a = 1000
    guess = int((max_a - min_a) / 2) + int(min_a)

最小值总是0,最大值总是1000,猜测总是500。你知道吗

在这里:

form.max_a = form.guess
form.guess = int((form.max_a - form.min_a) / 2) + int(form.min_a)

你所使用的是最小值,最大值和猜测值,我们确定它们已经是静态的,所以你实际上没有使用用户提供的新信息,因此你总是看到相同的猜测。你知道吗

您需要访问、使用和更新已创建的隐藏字段。你知道吗

我花了一些时间来修好路线,现在它的效果和预期的差不多:

@app.route('/form', methods=['GET', 'POST'])
def form():
    form = GuessForm()
    if form.validate():
        if form.more.data:
            form.minn.data = int((int(form.maxx.data) + int(form.minn.data)) / 2)
        elif form.less.data:
            form.maxx.data = int((int(form.minn.data) + int(form.maxx.data)) / 2)
        else:
            return 'yay'
        form.guess = int(int(form.maxx.data) - int(form.minn.data)) / 2 + (int(form.minn.data))
    return render_template("form.html", form=form)

相关问题 更多 >