基于关键字的 Flask 搜索

时间:2021-06-15 13:35:39

标签: python python-3.x flask flask-sqlalchemy

我是flask的新手,我正在做一个博客项目,我正在尝试添加一个搜索框,访问者或用户在其中输入一个关键字,然后将显示与该关键字相关的帖子。 我尝试了 whoosh 索引但它没有用,因为我使用的是 python3.9 所以我尝试了这个:

@app.route('/search', methods =["GET", "POST"])
def search():
    search_keyword = request.form.get("search_box")
    results =  db.engine.execute("SELECT * FROM post "
                           "WHERE title = search_box ")
    return render_template('home.html', results=results)

试图获取输入字段的值

<form class="form-inline my-2 my-lg-0">
                  <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" method="GET" action="search"  name="search_box">
                  <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
                </form>

没有错误但它不起作用,有人可以帮助我吗?谢谢

1 个答案:

答案 0 :(得分:0)

最终,我最终使用了 flask_msearch

我安装了它:pip install flask-msearch

init.py :

from flask_msearch import Search
...
search = Search(app)
search.init_app(app)
search.create_index(update=True)
MSEARCH_INDEX_NAME =  os.path.join(app.root_path,'msearch')
MSEARCH_PRIMARY_KEY = 'id'
MSEARCH_ENABLE = True

models.py 中:

class Post(db.Model):
    __searchable__ = ['title', 'content']

routes.py

@app.route('/search/')
def search():
    keyword = request.args.get('query')
    posts = Post.query.msearch(keyword,fields=['title', 'content'])
    return render_template("home.html",title='Searching..' + keyword, posts=posts)

在我的模板中:

<form method="GET" action="/search/">
                      <input type="text" name="query" class="form-control" placeholder="Search..." />
                      <button type="submit" class="btn btn-light-primary font-weight-bold">
                              
                      </button>
                    </div>
                  </form>
                  </div>

感谢所有帮助我的人

相关问题