尽管看过使用Flask构建howtos的URL,我还是找不到将表单数据保存在url中的方法。
此代码可以正常工作:
@app.route('/', methods=['GET'])
def index():
res = '''<form action="/search" method=post>
<p><input type="text" name="query" value="test"></p>
<p><input type="submit" value="Search"></p>
<br />
</form>'''
return res
@app.route('/search', methods=['POST'])
def search():
return request.form['query']
但结果显示在myapp.com/search
上,而我希望myapp.com/search?query=toto
我一定错过了一些非常基本的东西......我猜...有什么提示吗?
提前致谢
答案 0 :(得分:6)
您创建的HTML表单最终看起来像这样:
<form action="/search" method=post>
<p><input type="text" name="query" value="test"></p>
<p><input type="submit" value="Search"></p>
<br />
</form>
请注意method=post
部分。这告诉浏览器在提交表单时使用POST而不是GET。当它使用POST时,数据包含在结果请求的正文中。使用GET时,数据包含在URL中。因此,删除HTML的这一部分,以便您的表单看起来像这样,浏览器将发出GET请求。
<form action="/search">
<p><input type="text" name="query" value="test"></p>
<p><input type="submit" value="Search"></p>
<br />
</form>
请注意,如果您这样做,您还需要更改“搜索”视图..
@app.route('/search')
def search():
return request.args['query']
请注意,我已删除了methods=['POST']
部分,因此现在搜索视图将接受GET
请求。另外,我使用request.args
而不是request.form
。请参阅API Documentation了解差异。
有关详细信息,请参阅When should I use GET or POST method上的答案,或搜索描述差异的其他网站(例如this site)。
理解GET和POST之间的区别(特别是HTTP和HTML如何工作以从浏览器向服务器发出请求)对于理解像Flask这样的Web框架的工作方式是绝对必要的。