将表格数据保存在带烧瓶的URL中

时间:2014-01-02 15:15:49

标签: python forms url flask

尽管看过使用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

我一定错过了一些非常基本的东西......我猜...有什么提示吗?

提前致谢

1 个答案:

答案 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框架的工作方式是绝对必要的。