【发布时间】:2017-08-03 17:54:57
【问题描述】:
假设用户在表单中输入了一些 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 中添加一些内容,以便用户在表单中输入的任何内容都可以是唯一的。
为了将表单数据添加到 URL 中,我需要在 html 中的表单和 Flask /results 函数中添加什么?如果我可以提供任何其他信息以使我的问题更清楚,请告诉我。感谢您的帮助!谢谢
【问题讨论】:
-
我会散列组合的 id 并将其用作保存结果的 PK。
-
@Dan 你能扩展一下吗?用什么散列组合的 id?一个特定的python库?还有你说的“PK”是什么意思?
-
将结果保存到 DB,然后重定向到 /results/id,其中 id 是结果的 PK。您还可以使用查询字符串参数 /results/?id=1&id=2 然后在数据库中查找 id 的哈希值。
标签: python python-3.x flask flask-wtforms