📜  使用 Flask 和 jQuery 进行实时搜索(1)

📅  最后修改于: 2023-12-03 15:22:11.360000             🧑  作者: Mango

使用 Flask 和 jQuery 进行实时搜索

在网页开发中,很多场景下需要实现搜索功能,同时,随着搜索数据量的增大,搜索结果的返回速度也需要得到保证。实时搜索则能够在用户输入搜索关键字时立即显示相应结果,为用户提供更好的体验。在本文中,我们将学习如何使用 Flask 和 jQuery 实现实时搜索功能。

Flask

Flask 是一个使用 Python 编写的轻量级 Web 应用框架,其简洁、灵活的设计使得开发者能够快速地搭建 Web 应用。下面通过一个例子来简单介绍如何使用 Flask。

我们先创建一个名为 app.py 的文件,内容如下:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello, Flask!"

if __name__ == "__main__":
    app.run()

然后在终端中运行以下命令:

export FLASK_APP=app.py
flask run

你将看到如下输出:

 * Serving Flask app "app"
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

这表明 Flask 应用已经成功运行在本地服务器上了。访问 http://127.0.0.1:5000/ 将会显示 "Hello, Flask!"。

在实际应用中,我们可以在路由函数中读取请求数据,再根据数据进行相应的操作。我们将在后面章节中使用这种方式来实现实时搜索的功能。

jQuery

jQuery 是一个快速、简洁的 JavaScript 库,使得 HTML 文档遍历、事件处理、动画效果和 Ajax 简单明了。我们将通过 jQuery 实现前端的搜索功能。

假设我们有一个包含多个项目的列表,现在我们要实现一个实时搜索功能,使得用户在输入关键字时能够立即搜索出包含该关键字的项目。

我们先在 HTML 中添加一个输入框和一个列表:

<input type="text" id="search-box">
<ul id="list">
    <li>项目1</li>
    <li>项目2</li>
    <li>项目3</li>
    <li>项目4</li>
    <li>项目5</li>
</ul>

然后在 JavaScript 中添加以下代码:

$("#search-box").on("keyup", function() {
    var value = $(this).val().toLowerCase();
    $("#list li").filter(function() {
        $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
    });
});

这里使用了 jQuery 中的 keyup 事件来监听用户输入, $(this).val() 获取到当前输入框的值,然后使用 $(this).val().toLowerCase() 将其转换为小写形式。

我们使用 $("#list li") 获取到所有列表项,再使用 filter() 方法来进行筛选。toggle() 方法则根据参数来设置元素是否应该被隐藏或显示。

现在打开网页,在搜索框中输入关键字,你将看到只有包含该关键字的项目被显示了出来。

实时搜索

接下来,我们将结合 Flask 和 jQuery,来实现一个简单的实时搜索功能。

我们先在 Flask 中创建一个包含多个人名的列表:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route("/names")
def get_names():
    names = ["Alice", "Bob", "Charlie", "David", "Eve", "Frank", "Grace", "Henry"]
    return jsonify(names)

if __name__ == "__main__":
    app.run()

这里使用了 Flask 中的 jsonify 方法来返回 JSON 格式的数据,以方便在前端进行处理。

我们将前面 jQuery 中的例子进行修改:

$("#search-box").on("keyup", function() {
    var value = $(this).val().toLowerCase();
    $.get("/names", function(data) {
        $("#list li").filter(function() {
            var name = $(this).text().toLowerCase();
            var match = name.indexOf(value) > -1;
            $(this).toggle(match);
        });
    });
});

这里我们使用了 jQuery 中的 get() 方法来向 Flask 发送请求,获取到所有人名。然后使用 filter() 方法和 toggle() 方法来进行筛选和显示。

现在在搜索框中输入关键字,即可在列表中看到只有包含该关键字的人名被显示了出来。

总结

通过本文,我们学习了如何使用 Flask 和 jQuery 实现实时搜索功能。Flask 提供了后端的支持,能够返回数据,而 jQuery 则提供了前端的支持,能够动态地响应用户的输入。实时搜索功能在网页开发中被广泛使用,能够大幅提升用户体验。