我正在创建一个应用程序来进行一些分析,因为用户在表单中输入了一些ID。例如,如果用户在TextField表单中键入12345, 23456
,则应用程序将对这些ID运行一些分析,然后显示结果。我的问题是,当用户点击"提交"并且数据分析完成后,它始终将用户重定向到www.website.com/results
。我需要创建像www.website.com/results/12345+23456
这样的唯一网址,以便1)我可以拥有多个用户,2)用户可以将此链接发送给人员以重新生成分析。
现在,StackOverflow上有一些问题与我的问题类似,但它们不一样,对我没有帮助。首先,让我在讨论之前先展示一些代码。
我有一个主页,其中包含以下表单:
<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
指向website.com/results
,因此触发了我的Flask函数调用:
@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
中没有表单数据。
现在,我的另一个帖子是:Keeping forms data in url with flask,但它并没有回答或解决我的问题。对于这篇文章,人们提出的关键点是使用POST
(我已经做过),并使用return request.args['query']
获取并返回数据。对我来说,我已经按照自己的意愿处理了表单数据,而且我的return render_template()
正是我想要的。我只需要在results
URL中添加一些内容,这样对于用户放入表单的内容,它就可以是唯一的。
我需要在html和Flask /results
函数中添加到表单中,以便将表单数据添加到URL中吗?如果我能提供任何其他信息以使我的问题更清楚,请告诉我。我很感激帮助!感谢
答案 0 :(得分:1)
这不是关于Flask的问题。
如果您希望在提交表单时在网址中显示数据,则应使用method="get"
而不是&#34;发布&#34;。然后,网址将采用https://website.com/results/?pmid=12345。