表单提交后如何在 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'))
我不明白如何在用户提交表单后才在 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'))