使用烧瓶形式结果生成 URL?
Using flask form result to generate a URL?
我正在创建一个应用程序来进行一些分析,前提是用户在表单中输入了一些 ID。例如,如果用户在 TextField 表单中键入 12345, 23456
,应用程序将 运行 对这些 ID 进行一些分析,然后显示结果。我的问题是目前,当用户点击 "Submit" 并且数据分析完成时,它总是将用户重定向到 www.website.com/results
。我需要创建独特的 url,例如 www.website.com/results/12345+23456
,以便 1) 我可以拥有多个用户,并且 2) 用户可以将此 link 发送给其他人以重新生成分析。
现在,Whosebug 上有一些问题与我的问题类似,但它们并不相同,对我没有帮助。所以首先,让我在讨论之前展示一些代码。
我有一个包含以下表格的主页:
<div>
<form action="https://website.com/results/" class="form-inline" method="post">
<div class="form-group">
<label for="PubmedID">Pubmed ID(s)</label>
<input type="text" class="form-control" id="PubmedID" name="pmid" value="{{request.form.pmid}}">
</div>
<button type="submit" id= "myButton" class="btn btn-default" data-toggle="modal" data-target="#myModal">Submit</button>
</form>
</div>
如您所见,表单的 value
是 request.form.pmid
。我的 Flask-Wtform 在这里:
class pmidForm(Form):
pmid = TextField('PubmedID')
由于此表单的 action
指向触发我的 Flask 函数被调用的 website.com/results
:
@app.route('/results/', methods=["POST"])
def results():
form = pmidForm()
try:
if request.method == 'POST':
#entry = request.form or request.data doesn't help me...
entry = form.pmid.data #This is the user input from the form!
# DO LOTS OF STUFF WITH THE ENTRY
return render_template('results.html')
except Exception as e:
return(str(e))
如您所见,我正在使用 POST
和 form.pmid.data
从文本字段表单中获取数据。
同样,我不想只重定向到 /results
,我想对此进行扩展。我试图修改我的表单,使 form action
指向 https://website.com/results/{{request.form.pmid}}/
,然后将结果函数更新为
@app.route('/results/<form_stuff>', methods=["POST"])
def results(form_stuff):
但这从来没有奏效,并且会将我重定向到 404 未找到页面。我认为这是有道理的,因为无论如何 HTML 首次呈现时 action
中没有表单数据。
现在,与我的相似的另一个 post 是:Keeping forms data in url with flask,但它完全没有回答或解决我的问题。对于这个post,人家做的重点是用POST
(我已经用了),用return request.args['query']
获取和return数据。对我来说,我已经在根据需要处理表单数据,而且我的 return render_template()
正是我想要的。我只需要在 results
URL 中添加一些内容,以便它对于用户输入表单的任何内容都是唯一的。
我需要向 html 中的表单和 Flask /results
函数中添加什么才能将表单数据添加到 URL 中?如果我可以提供任何其他信息以使我的问题更清楚,请告诉我。感谢您的帮助!谢谢
这实际上不是关于 Flask 的问题。
如果您希望数据在提交表单时显示在 URL 中,您应该使用 method="get"
而不是 "post"。然后 URL 将采用 https://website.com/results/?pmid=12345.
的形式
我正在创建一个应用程序来进行一些分析,前提是用户在表单中输入了一些 ID。例如,如果用户在 TextField 表单中键入 12345, 23456
,应用程序将 运行 对这些 ID 进行一些分析,然后显示结果。我的问题是目前,当用户点击 "Submit" 并且数据分析完成时,它总是将用户重定向到 www.website.com/results
。我需要创建独特的 url,例如 www.website.com/results/12345+23456
,以便 1) 我可以拥有多个用户,并且 2) 用户可以将此 link 发送给其他人以重新生成分析。
现在,Whosebug 上有一些问题与我的问题类似,但它们并不相同,对我没有帮助。所以首先,让我在讨论之前展示一些代码。
我有一个包含以下表格的主页:
<div>
<form action="https://website.com/results/" class="form-inline" method="post">
<div class="form-group">
<label for="PubmedID">Pubmed ID(s)</label>
<input type="text" class="form-control" id="PubmedID" name="pmid" value="{{request.form.pmid}}">
</div>
<button type="submit" id= "myButton" class="btn btn-default" data-toggle="modal" data-target="#myModal">Submit</button>
</form>
</div>
如您所见,表单的 value
是 request.form.pmid
。我的 Flask-Wtform 在这里:
class pmidForm(Form):
pmid = TextField('PubmedID')
由于此表单的 action
指向触发我的 Flask 函数被调用的 website.com/results
:
@app.route('/results/', methods=["POST"])
def results():
form = pmidForm()
try:
if request.method == 'POST':
#entry = request.form or request.data doesn't help me...
entry = form.pmid.data #This is the user input from the form!
# DO LOTS OF STUFF WITH THE ENTRY
return render_template('results.html')
except Exception as e:
return(str(e))
如您所见,我正在使用 POST
和 form.pmid.data
从文本字段表单中获取数据。
同样,我不想只重定向到 /results
,我想对此进行扩展。我试图修改我的表单,使 form action
指向 https://website.com/results/{{request.form.pmid}}/
,然后将结果函数更新为
@app.route('/results/<form_stuff>', methods=["POST"])
def results(form_stuff):
但这从来没有奏效,并且会将我重定向到 404 未找到页面。我认为这是有道理的,因为无论如何 HTML 首次呈现时 action
中没有表单数据。
现在,与我的相似的另一个 post 是:Keeping forms data in url with flask,但它完全没有回答或解决我的问题。对于这个post,人家做的重点是用POST
(我已经用了),用return request.args['query']
获取和return数据。对我来说,我已经在根据需要处理表单数据,而且我的 return render_template()
正是我想要的。我只需要在 results
URL 中添加一些内容,以便它对于用户输入表单的任何内容都是唯一的。
我需要向 html 中的表单和 Flask /results
函数中添加什么才能将表单数据添加到 URL 中?如果我可以提供任何其他信息以使我的问题更清楚,请告诉我。感谢您的帮助!谢谢
这实际上不是关于 Flask 的问题。
如果您希望数据在提交表单时显示在 URL 中,您应该使用 method="get"
而不是 "post"。然后 URL 将采用 https://website.com/results/?pmid=12345.