代码之家  ›  专栏  ›  技术社区  ›  tdigangi5

烧瓶视图显示400错误,而不是带有表单的模板

  •  2
  • tdigangi5  · 技术社区  · 7 年前

    我试图显示一个带有表单的页面,然后添加一个 Player 400 Bad Request request.form

    <form method="post">
        {{ form.hidden_tag() }}
        <input name="name">
        <input name="available">
        <input type="submit">
    </form>
    
    @app.route('/addplayer', methods=['GET', 'POST'])
    def addplayer():
        connect('basketball_contracts', host='localhost', port=27017)
        n = request.form['name']
        a = request.form['available']
        post= Post(
            name=n,
            available=a
        )
        post.tags = ['test']
        post.save()
        return render_template('addplayer.html', form=form)
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   davidism Stephen J.    7 年前

    GET POST request.form 仅填写在 最初显示页面。

    要求类型 在一个 if request.method == 'POST' 块处理后返回重定向 请求,否则返回呈现的模板。

    from flask import url_for, redirect, render_template
    
    @app.route('/addplayer', methods=['GET', 'POST'])
    def addplayer():
        if request.method == 'POST':
            Post(
                name=request.form['name'],
                available=request.form['available']
            ).save()
            return redirect(url_for('index'))
    
        return render_template('addplayer.html')
    

    由于您似乎正在使用Flask WTF,因此可以使用表单的 validate_on_submit method . 在这种情况下,您还可以通过表单实例访问数据,并使用表单为您呈现输入。

    from flask import url_for, redirect, render_template
    
    @app.route('/addplayer', methods=['GET', 'POST'])
    def addplayer():
        form = AddPlayerForm()
    
        if form.validate_on_submit():
            Post(
                name=form.name.data,
                available=form.available.data
            ).save()
            return redirect(url_for('index'))
    
        return render_template('addplayer.html', form=form)
    
    <form method=post>
        {{ form.hidden_tag() }}
        {{ form.name.label}} {{ form.name }}<br>
        {{ form.available.label }} {{ form.available }}<br>
        <input type=submit value="Add Player">
    </form>