Flask和MongoDB:如何实现搜索功能
首先,在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>
注意:上面的代码仅为演示代码,实际使用时需要根据自己的需求进行适当修改。
相关文章