Flask实现简单搜索功能


主要功能是通过form的方式传值,再到数据库中查询。下面是数据库的内容我们这里主要是实现对content进行模糊匹配。

首先打开pycharm,构建一个最简单的flask应用。

#search.py

from flask import Flask

app = Flask(__name__)

@app.route("/")

def index():

    return render_template('search.html')

if __name__ =="__main__":

    app.run()

 

既然要搜索,必要要连接数据库,要引入SQLAlchemy这个包。

#search.py

from flask_sqlalchemy import SQLAlchemy

 

app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8'

app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True #root用户名123456密码 test数据库

最后我们需要从form表单拿到我们想要的数据。然后进行数据库查询操作

@app.route('/', methods=['post', 'get'])

def search():

    content = request.form.get('content') #需要查询的内容

    if content is None:

        content = " "

    quotes = Quotes.query.filter(Quotes.content.like("%"+content+"%")if content is not None else "").all() #查询跟content有关的数据,返回结果为列表

    return render_template('search.html',quotes = quotes) #将查询结果返回到前端

#search,html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Title</title>

</head>

<body>

<form method="post" action="{{url_for('search')}}">

    <input type="text" name="content" id="content" placeholder="请输入搜索内容">

    <input type="submit" value="搜索">

</form>

<div>

    <table border="1px" cellspacing="0px">

        {% for i in quotes %}

        <tr>

            <td>名字</td>

            <td>{{i.name}}</td>

            <td>内容</td>

            <td>{{i.content}}</td>

        </tr>

        {% endfor %}

    </table>

</div>

</body>

</html>


效果如下:

一个简单的查询功能就完成了,这里只是做了单条件模糊查询。接下来介绍多条件模糊查询和精确查询

#多条件模糊查询

content = Quotes.query.filter(

     Quotes.id.like("%" + id + "%") if id is not None else "",

     Quotes.name.like("%" + name + "%") if name is not None else "",

     Quotes.content.like("%" + content + "%") if content is not None else ""

 ).all()

 

#单条件精确查询

content = Quotes.query.filter_by(id=id).all()

#多条件精确查询

content = Quotes.query.filter_by(id=id,name=name).all()

最后附上完整代码

#search.py

from flask import Flask, config, render_template, request, flash, url_for, session

from flask_sqlalchemy import SQLAlchemy

 

 

app = Flask(__name__)

 

app.config.from_object(config)

 

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1914571065lyj@127.0.0.1:3306/java2019?charset=utf8'

app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

 

db = SQLAlchemy(app)

 

 

class Quotes(db.Model):

    id = db.Column(db.Integer, primary_key=True, comment='ID')

    name = db.Column(db.String(255), unique=True, comment='名称')

    content = db.Column(db.String(255), comment='内容')

 

 

@app.route('/', methods=['post', 'get'])

def search():

    content = request.form.get('content')

    if content is None:

        content = " "

    quotes = Quotes.query.filter(Quotes.content.like("%"+content+"%")if content is not None else "").all()

    return render_template('search.html',quotes = quotes)

 

 

if __name__ == "__main__":

    app.run(debug=True)

 

#search.py

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Title</title>

</head>

<body>

<form method="post" action="{{url_for('search')}}">

    <input type="text" name="content" id="content" placeholder="请输入搜索内容">

    <input type="submit" value="搜索">

</form>

<div>

    <table border="1px" cellspacing="0px">

        {% for i in quotes %}

        <tr>

            <td>名字</td>

            <td>{{i.name}}</td>

            <td>内容</td>

            <td>{{i.content}}</td>

        </tr>

        {% endfor %}

    </table>

</div>

</body>

</html>

 

 
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐