Flask和MongoDB:如何实现搜索功能

2023-04-15 00:00:00 flask 如何实现 搜索功能

首先,在Flask中连接MongoDB需要使用pymongo库,具体方法如下:

from flask import Flask
from pymongo import MongoClient
app = Flask(__name__)
client = MongoClient('mongodb://localhost:27017/')
db = client['test_database']  # 这里的test_database需要替换成你自己的database名称
collection = db['test_collection'] # 这里的test_collection需要替换成你自己的collection名称

接着,我们需要创建一个搜索页面,让用户可以输入要搜索的内容。代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Search</title>
</head>
<body>
    <form action="/search" method="POST">
        <input type="text" name="search_query" placeholder="请输入要搜索的内容">
        <button type="submit">搜索</button>
    </form>
</body>
</html>

接着,在Flask中为搜索页面添加路由,并实现搜索功能。具体代码如下:

from flask import request, render_template
@app.route('/search', methods=['GET', 'POST'])
def search():
    if request.method == 'POST':
        search_query = request.form['search_query']
        results = collection.find({'$text': {'$search': search_query}})
        return render_template('search_results.html', results=results)
    else:
        return render_template('search.html')

在上面的代码中,我们首先判断请求的方法是GET还是POST。如果是POST方法,就从请求中获取搜索内容,然后使用MongoDB的$text operator进行全文搜索,并将搜索结果传递给搜索结果页面进行展示。如果是GET方法,就直接渲染搜索页面。
最后,我们需要创建一个搜索结果页面,展示搜索结果。具体代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Search Results</title>
</head>
<body>
    <h1>搜索结果:</h1>
    <ul>
        {% for result in results %}
        <li>{{ result.title }}: {{ result.content }}</li>
        {% endfor %}
    </ul>
</body>
</html>

在上面的代码中,我们使用了jinja2模板引擎来动态渲染搜索结果。
最后,附上完整代码:

from flask import Flask, request, render_template
from pymongo import MongoClient
app = Flask(__name__)
client = MongoClient('mongodb://localhost:27017/')
db = client['test_database']
collection = db['test_collection']
@app.route('/')
def index():
    return 'Hello, World!'
@app.route('/search', methods=['GET', 'POST'])
def search():
    if request.method == 'POST':
        search_query = request.form['search_query']
        results = collection.find({'$text': {'$search': search_query}})
        return render_template('search_results.html', results=results)
    else:
        return render_template('search.html')
if __name__ == '__main__':
    app.run(debug=True)

搜索页面的HTML代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Search</title>
</head>
<body>
    <form action="/search" method="POST">
        <input type="text" name="search_query" placeholder="请输入要搜索的内容">
        <button type="submit">搜索</button>
    </form>
</body>
</html>

搜索结果页面的HTML代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Search Results</title>
</head>
<body>
    <h1>搜索结果:</h1>
    <ul>
        {% for result in results %}
        <li>{{ result.title }}: {{ result.content }}</li>
        {% endfor %}
    </ul>
</body>
</html>

注意:上面的代码仅为演示代码,实际使用时需要根据自己的需求进行适当修改。

相关文章