假设我有一个这样的表格
<form role="form">
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>
</form>
然后我有一个相当通用的路由,通过静态文件
进行排序@app.route('/search/properties/', methods=['GET', 'POST'])
def properties_search():
form = request.form
if request.method == 'POST':
properties = CSVReader('properties.csv')
d = [x._asdict() for x in properties.data]
gen = stream_with_context(search_csv(d, form))
return Response(stream_with_context(
stream_template('advanced_search/results.html', form=form, rows=gen)
))
return render_template('advanced_search/advanced.html', form=form)
这将呈现一个包含我正在寻找的结果的页面 - 而且一切都很顺利。但是,在页面上,我还想添加以CSV格式下载数据的功能。
| download csv | | return to search |
- result 1
- result 2
...
我遇到的问题是,在发布请求之后,我需要一些方法来了解他们在应用程序上的最后一次表单请求。
这样做的最佳方式是什么?
答案 0 :(得分:1)
没有单一的最佳方式&#34;做到这一点,因为最好的&#34;在您的具体情况下可能不适合另一种情况。话虽这么说,下面是几种可能的方式(它们几乎不会划掉你需要做的事情以使它们能够生产就绪)并且还有很多甚至更多。
你真的需要自己研究这些选项;你所拥有的场景并不是特定于python或flask,对于构建需要记住状态的HTTP应用程序的人来说,这几乎是一个问题!
submit
输入,将这些值发布回下载渲染器。
我不会成为这个的忠实粉丝,因为它需要一个按钮和一个POST,当你真的在寻找GET时,如果你真的需要密码才能呈现结果,那么它就是sa安全问题。
当您收到表单的初始POST
以生成搜索结果时。取email
并将其存储在数据库表(或其他一些持久存储机制)中,记录由此操作产生的某种生成的ID
。您还可以保存用户提交的任何其他搜索参数等。
此ID
成为&#34;下载为CSV&#34;的链接的查询字符串参数。即,当您的模板呈现初始搜索页面时,该链接最终会像"http://blahblah.com/download?ID=12345"
当用户请求链接时,根据查询字符串ID
参数从数据库中查找搜索/用户信息,然后将其传递给将为您呈现CSV的任何模板。< / p>
我建议采用这种方法,因为它根本不要求您将用户名/密码返回给客户端。
希望这能让你思考:)