美文网首页
一个小项目

一个小项目

作者: Noza_ea8f | 来源:发表于2019-11-21 11:55 被阅读0次
    image.png

    发现如果app在自己建的文件夹里,如果要引用模板,就需要把templates和static文件夹移动到这个文件夹,也就是说templates默认引用的是相对路径;

    • 配置数据库
    # 创建数据库对象
    db = SQLAlchemy(app=app)
    # 数据库配置
    # 数据库地址
    # app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL', 'sqlite:///' + os.path.join(app.root_path, 'data.db'))
    app.config['SQLALCHEMY_DATABSE_URI'] = 'sqlite:///db.sqlite3'
    # 关闭数据跟踪修改
    app.config['SQLALCHEMY_TRACE_MODIFICATIONS'] = False
    

    新建一个python文件db.py,用于创建数据库,

    • 添加书和作者模型


      image.png
    • 添加数据

    if __name__ == '__main__':
        db.drop_all()
        db.create_all()
    
        # 生成数据
        au1 = Author(name='罗贯中')
        au2 = Author(name='曹雪芹')
        au3 = Author(name='施耐庵')
        # 把数据提交给用户会话
        db.session.add_all([au1, au2, au3])
        # 提交会话
        db.session.commit()
    
        bk1 = Book(name='三国演义', author_id=au1.id)
        bk2 = Book(name='红楼梦', author_id=au2.id)
        bk3 = Book(name='水浒传', author_id=au3.id)
    
        db.session.add_all([bk1, bk2, bk3])
        db.session.commit()
    
        manager.run()
    

    按照视频写的上面代码,运行后会报错,说找不到表;
    之后我新建了一个create_db.py表,用于创建数据;

    from app import db, Author, Book
    
    db.drop_all()
    db.create_all()
    
    # 生成数据
    au1 = Author(name='罗贯中')
    au2 = Author(name='曹雪芹')
    au3 = Author(name='施耐庵')
    # 把数据提交给用户会话
    db.session.add_all([au1, au2, au3])
    # 提交会话
    db.session.commit()
    
    bk1 = Book(name='三国演义', author_id=au1.id)
    bk2 = Book(name='红楼梦', author_id=au2.id)
    bk3 = Book(name='水浒传', author_id=au3.id)
    
    db.session.add_all([bk1, bk2, bk3])
    db.session.commit()
    

    执行后提示警告信息一样;
    但是生成的db.db文件大小有了变化;
    刷新网页显示出信息;
    成功!

    进一步拆分,把模型放到model.py
    优化后的代码:
    app.py

    from datetime import timedelta
    
    from flask import render_template, Flask
    from flask_script import Manager
    from flask_sqlalchemy import SQLAlchemy
    
    from model import Author
    
    app = Flask(__name__)
    # 设置静态文件缓存过期时间
    app.send_file_max_age_default = timedelta(seconds=1)
    
    # 创建数据库对象
    db = SQLAlchemy(app=app)
    # 数据库配置
    app.config['SECRET_KEY'] = '123'
    # 数据库地址
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.db'
    # 关闭数据跟踪修改
    app.config['SQLALCHEMY_TRACE_MODIFICATIONS'] = False
    # 设置托管
    manager = Manager(app=app)
    
    
    @app.route('/')
    def index():
        # 查询作者信息传给模板
        authors = Author.query.all()
        return render_template('books.html', authors=authors)
    
    
    if __name__ == '__main__':
        manager.run()
    

    model.py

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    
    # 创建数据库对象
    db = SQLAlchemy(app=app)
    # 数据库配置
    app.config['SECRET_KEY'] = '123'
    # 数据库地址
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.db'
    # 关闭数据跟踪修改
    app.config['SQLALCHEMY_TRACE_MODIFICATIONS'] = False
    
    
    # 定义书和作者模型
    # 作者模型
    class Author(db.Model):
        # 表名
        __tablename__ = 'authors'
        # 字段名
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(16), unique=True)
        # 关系引用
        # books是给自己用的,author是给Book模型用的
        books = db.relationship('Book', backref='author')
    
        def __repr__(self):
            return 'Author:{}'.format(self.name)
    
    
    # 书籍模型
    class Book(db.Model):
        __tablename__ = 'books'
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(16), unique=True)
        author_id = db.Column(db.Integer, db.ForeignKey('authors.id'))
    
        def __repr__(self):
            return 'Book:{}{}'.format(self.name, self.id)
    

    create_db.py

    from app import db
    from model import Author, Book
    
    db.drop_all()
    db.create_all()
    
    # 生成数据
    au1 = Author(name='罗贯中')
    au2 = Author(name='曹雪芹')
    au3 = Author(name='施耐庵')
    # 把数据提交给用户会话
    db.session.add_all([au1, au2, au3])
    # 提交会话
    db.session.commit()
    
    bk1 = Book(name='三国演义', author_id=au1.id)
    bk2 = Book(name='红楼梦', author_id=au2.id)
    bk3 = Book(name='水浒传', author_id=au3.id)
    
    db.session.add_all([bk1, bk2, bk3])
    db.session.commit()
    

    这样的话只需要在app中写业务逻辑就行了

    • 使用模板显示数据库查询的数据
    • 使用WTF显示表单
    • 实现增删逻辑

    相关文章

      网友评论

          本文标题:一个小项目

          本文链接:https://www.haomeiwen.com/subject/fwboictx.html