使用python flask搜索应用程序

时间:2016-10-18 20:16:41

标签: python flask

我正在尝试使用我的烧瓶应用程序进行简单的搜索功能。我有以下代码启动搜索

<form action="/search" method=post>
 <input type=text name=search value="{{ request.form.search }}"></br>
 <div class="actions"><input type=submit value="Search"></div>
</form>

这与我的search / controllers.py脚本挂钩,看起来像这样

@search.route('/search/')
@search.route('/search/<query>', methods=['GET', 'POST'])
def index(query=None):
    es = current_app.config.get("es")

    q = {"query":{ "multi_match":{"fields":["name","tags","short_desc","description"],"query":query,"fuzziness":"AUTO"}}}
    matches = es.search('products', 'offerings', body=q)
    return render_template('search/results.html', services=matches['_source'])

不幸的是,每当我实际搜索时,我都会收到路由错误:

  

FormDataRoutingRedirect:已向此网址发送请求(http://localhost:8080/search),但路由系统自动向“http://localhost:8080/search/”发出了重定向。 URL是使用尾部斜杠定义的,因此如果没有使用斜杠,Flask将自动重定向到带有斜杠的URL。确保直接将您的POST请求发送到此URL,因为我们无法使浏览器或HTTP客户端可靠地重定向表单数据或没有用户交互。注意:此异常仅在调试模式下引发

我尝试将方法更改为methods=['POST'],但没有任何区别。

2 个答案:

答案 0 :(得分:3)

使用url_for('index')为操作生成正确的网址。

<form action="{{ url_for('index') }}">

目前,您在没有尾随/的情况下提交到网址。 Flask将其重定向到尾随/的路由,但POST数据在许多浏览器上都没有重定向,因此Flask会警告您这个问题。

答案 1 :(得分:0)

如错误所述,您的表单将发布到/ search,但您的处理程序已设置为/ search /。让他们一样。