【问题标题】:I am unable to get data from flask forms [duplicate]我无法从烧瓶表单中获取数据[重复]
【发布时间】:2019-09-29 04:56:15
【问题描述】:

我喜欢用 wtforms 构建的搜索栏,但我不知道由于某种原因我无法获取在搜索栏中输入的数据或值。我尝试了在线教程中的几乎所有内容,但找不到解决方案。下面是我的代码示例。

对于我的搜索栏,我也尝试过 form.search.datarequest.form['search'],但它不起作用。

#flask_app.py

from flask import Flask, render_template, url_for, flash, redirect, request
from forms import SearchForm

app = Flask(__name__)
app.config['SECRET_KEY'] = '791628bb0b13ce0c676dfde'

@app.route('/')
@app.route('/home')
def home():
     return render_template('home.html')


@app.route('/search', methods= ['GET', 'POST'])
def search():
    form = SearchForm()
    if form.validate_on_submit():
        if form.search.data == 'admin':
            return redirect(url_for('home'))

    return render_template('search.html', form= form)

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

#forms.py

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

class SearchForm(FlaskForm):
    search = StringField('search', validators=[DataRequired()])
    submit = SubmitField('Search')

#search.html
{% extends 'layout.html' %}
{% block content %}
    <form action="" class="form-inline mt-4" method="POST">
        <div class="form-group">
            {{form.search(class= 'form-control', placeholder= 'Enter term to search')}}
            {{form.submit(class= 'btn btn-outline-primary')}}
        </div>
    </form>
{%endblock%}

#home.html

{% extends 'layout.html' %}
{% block content %}
    <h1>Welcome to homepage!</h1>
{%endblock%}

有什么错误吗?我希望 form.search.data 应该能够从搜索栏获取数据。

【问题讨论】:

  • action=""... 这不会向search提交任何内容

标签: python flask flask-wtforms


【解决方案1】:

您没有在 HTML 表单中插入 CSRF 字段,这可以通过 form.hidden_tag() 完成

#search.html
{% extends 'layout.html' %}
{% block content %}
    <form action="" class="form-inline mt-4" method="POST">
        {{ form.hidden_tag() }}
        <div class="form-group">
            {{form.search(class='form-control', placeholder= 'Enter term to search')}}
            {{form.submit(class='btn btn-outline-primary')}}
        </div>
    </form>
{% endblock %}

this

【讨论】:

  • 我的代码和上面一样,我确实使用了你的解决方案,我工作得很好,但是为什么在if form.validate_on_submit(): flash(form.search.data)之后我无法从搜索栏中获取闪现的数据
  • 您需要通过get_flashed_messages()将闪现的消息添加到模板中。在此处查看docs
猜你喜欢
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 2017-03-17
相关资源
最近更新 更多