表单提交后如何在 Flask 中创建动态路由?

How to create dynamic route in Flask after form submit?

我不明白如何在用户提交表单后才在 Flask 中创建动态路由。下面的代码有效,但我只希望 /search/<query> 在提交表单后可以访问。使用我当前的代码,我仍然可以通过在浏览器中输入 /search/any-search-query 来访问该页面。

这是我正在做的事情:

1 - 这是表单的 POST 请求。

@app.route('/submit', methods=['POST'])
def submit():
    if request.method == 'POST':
        s = request.form['search']
        return redirect(url_for('results', query=s))
    else:
        redirect(url_for('index'))

2 - 当用户提交表单时,将他们重定向到具有动态路由的新页面。

@app.route('/search/<query>', methods=['GET'])
def results(query):
    return render_template("results.html")

3 - 这是我的 HTML 文件中的表格。

<form action="{{ url_for('submit') }}" method="POST">
    <input type="search" id="search" name="search" placeholder="Search">
    <button>Submit</button>
</form>

我们可以直接向另一个页面发送GET请求。

因此在您的模板中:

<form action="{{ url_for('results') }}" method="GET">
    <input type="search" id="query" name="query" placeholder="Search">
    <button>Submit</button>
</form>

并且在您的 results 路线中:

from flask import request

@app.route('/search')
def results():
    query = request.args.get("query")
    # ...
    return render_template("results.html")

请注意,如果您想直接进入结果页面,您需要键入 localhost:5000/search?query=any-search-query 而不是 /search/any-search-query

这是我正在尝试的有效方法,但我不知道这是否是一个干净的解决方案。

from flask import session
@app.route('/submit', methods=['POST'])
def submit():
    session['search'] = 'yes' # assign session value
    if request.form:
        s = request.form['search']
        return redirect(url_for('results', query=s))
    else:
        redirect(url_for('index'))

然后更新

@app.route('/search/<query>', methods=['GET'])
def results(query):
    if session['search'] == 'yes':
        session['search'] = 'no' # assign new value to session
        return render_template("results.html")
    else:
        return redirect(url_for('index'))