Python Flask-使用相同的视图呈现搜索表单,然后呈现搜索结果
我想要一个搜索表单来查询数据库并在下面显示搜索结果。我不希望刷新页面时出现任何确认警告。另外,我想知道是否可以用一个视图函数来完成,因为我看到的所有教程都使用了多个视图函数。喜欢和 这正在工作,但在单击浏览器上的“刷新”按钮时会显示一条警告,要求确认: main.pyPython Flask-使用相同的视图呈现搜索表单,然后呈现搜索结果,python,search,flask,Python,Search,Flask,我想要一个搜索表单来查询数据库并在下面显示搜索结果。我不希望刷新页面时出现任何确认警告。另外,我想知道是否可以用一个视图函数来完成,因为我看到的所有教程都使用了多个视图函数。喜欢和 这正在工作,但在单击浏览器上的“刷新”按钮时会显示一条警告,要求确认: main.py @app.route('/', methods=['GET', 'POST']) @app.route('/index', methods=['GET', 'POST']) def index(): form = Sear
@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def index():
form = SearchForm()
query = form.data['search']
if query != '':
results = Foo.query.filter(Foo.name.like('%'+query+'%')).all()
return render_template('index.html', form=form, query=query, results=results)
return render_template('index.html', form=form)
forms.py
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired
class SearchForm(FlaskForm):
search = StringField('search', validators=[DataRequired()])
模板/index.html
{% block page_content %}
<div class="page-header">
<form style="display: inline;" action="{{ url_for('index') }}" method="post" name="search">
{{ form.search(size=20) }}
<input type="submit" value="Search">
</form>
{% if results %}
<h1>Search results for "{{ query }}":</h1>
{{ results }}
{% endif %}
</div>
{% endblock page_content %}
您可以使用一个函数来呈现搜索页面,然后在
表单之后。在提交()上验证并查询数据库并返回结果。对于搜索结果,请添加以将其显示在与搜索表单相同的模板上
@app.route('/search', methods=['GET', 'POST'])
def search():
form = SearchForm()
if form.validate_on_submit():
search_term = form.query.data
results = Foo.query.all()
return render_template('search.html', form=form, results=results)
return render_template('search.html', form=form)
search.html
{% block content%}
<form method="post">
{{ form.csrf_token }}
{{ form.query }}
{{ form.submit }}
{% if results %}
{{ results }}
{% endif %}
</form>
{% endblock %}
{%block content%}
{{form.csrf_token}
{{form.query}
{{form.submit}
{%if结果%}
{{results}}
{%endif%}
{%endblock%}
它可以工作,但在刷新时会显示确认警告。什么是确认警告?这是因为浏览器在被要求刷新页面时会重复上次发送的请求。当最后发送的请求是带有表单数据的POST请求时,刷新将导致重复的表单提交,这在几乎所有情况下都不是所需的操作。它已通过post/redirect/get模式修复。您必须更改,以便它重定向到不同的视图,即def show_results():
。这也是您无法共享url的原因,即example.com/search?query='some text'
。此示例中缺少一些内容。接下来,它将呈现一个没有可见输入字段的空页面,以执行搜索查询。
{% block content%}
<form method="post">
{{ form.csrf_token }}
{{ form.query }}
{{ form.submit }}
{% if results %}
{{ results }}
{% endif %}
</form>
{% endblock %}