flask搜索

flask後端代碼

from flask import Flask,render_template,abort
from flask_sqlalchemy import SQLAlchemy
import pymysql
import datetime
pymysql.install_as_MySQLdb()

app = Flask(__name__)


# 設置連接數據庫的URL
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:[email protected]:3306/db_flask'

# 數據庫和模型類同步修改
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

# 查詢時會顯示原始SQL語句
app.config['SQLALCHEMY_ECHO'] = True

db = SQLAlchemy(app)



class Category(db.Model):
    __tablename__ = 'tbl_category'
    id = db.Column(db.Integer,primary_key=True)#告訴它這是一個主鍵
    name = db.Column(db.String(32),nullable=False)#告訴它默認值不能爲null
    news = db.relationship('News',backref='category')
    #加上這個之後,查詢的話可以直接點
    #分類查文章的話直接 category.news 表示查詢這個分類下的所有文章
    #然後 news.category  表示查詢這個文章的分類

class News(db.Model):
    __tablename__ = 'tbl_news'
    id  = db.Column(db.Integer,primary_key=True)
    title = db.Column(db.String(37),nullable=False)
    created_time = db.Column(db.DateTime,default=datetime.datetime.now())
    cate_id = db.Column(db.Integer,db.ForeignKey('tbl_category.id'))
    #一對多

@app.route('/')
def index():
    #cats =  Category.query.all()
    cat = Category.query.get(id)
    if not cat:
        abort(404)
    else:
        news = cat.news
    ctx = {
        'cats':news
    }
    return render_template('12index.html',**ctx)

@app.route('/cat/<int:id>/')
def cat(id):
   news = News.query.filter_by(cate_id=id).all()
   ctx = {
        'news':news
    }
   return render_template('12new.html', **ctx)

@app.route('/test')
def test():
    Category.query.get(1)#根據主鍵去查詢,這個返回的是一個對象
    Category.query.filter_by(id=1).all()#列表形式返回,前端需要遍歷
    Category.query.filter_by(id=1,name='娛樂').all()#根據兩個條件來查(兩個條件都必須滿足)

    #或者查詢(滿足其中一個條件就可以)
    from sqlalchemy import or_
    Category.query.filter(or_(Category.id == 1,Category.name=='科技')).all()

    Category.query.filter_by(id=1,name='娛樂').first()#返回一個對象,不需要遍歷
    #filter查詢的寫法,必須得加上類名.//// ==
    Category.query.filter(Category.id == 1).all()#列表

    #filter可以支持複雜查詢
    Category.query.filter(Category.name.startswith('科技')).all()
    #表示以科技開頭

    Category.query.offset(1).all()
    #表示跳過第一條數據,查詢除了第一個數據之外所有的數據

    Category.query.offset(0).limit(1).all()
    #表示跳過第一條數據,返回至少一條數據

    Category.query.order_by(Category.id.desc().offset(1).limit(1)).all()
    #表示倒敘查找,先倒再查


    # 分類
    from sqlalchemy import func
    db.session.query(News.cate_id,func.count(News.cate_id)).group_by(News.cate_id).all()

    #模糊查詢
    Category.query.filter_by(Category.name.contains('娛樂')).all()




    return '查詢其他'

if __name__ == '__main__':
    # db.drop_all()#全部刪除
#     # db.create_all()#表示重新創建
#     # cat = Category(name='科技')
#     # cat1 = Category(name='娛樂')
#     #
#     # #db.session.add(cat)#添加單個數據
#     # #添加多個數據
#     # db.session.add_all([cat,cat1])
#     #
#     # db.session.commit()
#     # #先提交,讓這個表先生成id,然後新聞才能夠點出來數據
#     #
#     # #給新聞添加數據
#     # new =  News(title='科技前沿',cate_id=cat.id)
#     # new2 =  News(title='一起來喫瓜',cate_id=cat1.id)
#     # db.session.add_all([new,new2])
#     # db.session.commit()
        app.run(debug=True)

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% for cat in cats %}
    <li><a href="/cat/{{ cat.id }}">{{ cat.name }}</a></li>
{% endfor %}
</body>
</html>

new.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% for new in news %}
    <li><a>{{ new.title }}</a></li>
{% endfor %}
</body>
</html>

運行結果:

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章