Flask-- (五) Flask插件(settings配置文件、蓝图、flask-script、flask-migrate)

1、settings配置文件

当配置信息的数量变多,若是全部放在app.py文件中就会显得代码太乱,可读性差,为此,Flask提供了一个config对象来接收多种配置格式,方便管理配置文件信息。

config对象的方法:

方法描述
from_object从类当中导入配置,需要编写配置类
from_envvar从沙箱环境当中导入
from_json从json文件当中导入
from_mapping从字典对象当中导入配置
from_pyfile从python文件当中导入
# config.py
import os

base_dir = os.path.dirname(
    os.path.abspath(__file__)
)  # 指定文件存放的目录


class BaseConfig:
    """基本类"""
    SQLALCHEMY_TRACK_MODIFICATIONS = True  # 支持追踪修改


class TestConfig(BaseConfig):
    """开发测试类"""
    #  设置项目开发时的数据库配置
    SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(base_dir, "OA_test.sqlite")
    debug = True


class WorkConfig(BaseConfig):
    """项目部署类"""
    #  项目部署在服务器运行时的数据库配置
    SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(base_dir, "OA_work.sqlite")
    debug = True
# app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import TestConfig, WorkConfig
from flask import render_template


app = Flask(__name__)  # 实例化应用

app.config.from_object(TestConfig)  # config从类中导入配置

db = SQLAlchemy(app)  # flask加载数据库


class Base(db.Model):
    __abstract__ = True  # 作为父类完成被继承,本身不执行
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)

    def save(self):
        db.session.add(self)
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()

    def update(self):
        db.session.commit()


class Person(Base):
    """员工类"""
    username = db.Column(db.String(32), unique=True)  # 用户名不能重复
    age = db.Column(db.Integer, default=18)  # 年龄默认十八岁
    gender = db.Column(db.String(16))


@app.route("/")
def index(user):
    user = Person.query.get(1)  # 获取id为1的用户
    return render_template("index.html", **locals())


if __name__ == '__main__':
    db.create_all()
    app.run(debug=True, use_reloader=True)

2、Flask蓝图

当项目规模扩大时,就需要一个更加稳定,并且统一的项目结构,因此,官方推出了蓝图模式。蓝图模式把功能和app区分开来,实现了在一个项目当中设置多个视图,多个模型。

文件目录

# main.py
from flask import Flask
from Blue_one import bule_one
from Blue_two import blue_two

application = Flask(__name__)  # 实例化应用

application.register_blueprint(bule_one, url_prefix="/one")  # 应用安装蓝图
application.register_blueprint(blue_two, url_prefix="/two")  # url_prefix设置路由前添加字段/two***

if __name__ == '__main__':
    application.run()  # 蓝图运行
# Blue_one/__init__.py
"""
创建蓝图一
"""

from flask import Blueprint

# 实例化蓝图
bule_one = Blueprint("bule_one", __name__)

from Blue_one.view import *  # 导入所有的视图,让视图运行
# view.py
"""
蓝图一的视图
"""
from Blue_one import bule_one

@bule_one.route("/index/")
def index():
    return "blue_one"

上述的blue_one和blue_two相当于两个app,每一个app各自负责自己的业务逻辑,例如电商项目中的买家页面和买家页面。

3、Flask-script 命令行控制

在Linux系统下,操作项目需要用到命令,因此有了Flask-script。

包的安装

pip install flask-script

编写启动项目的命令

from flask import Flask  # 导入
from flask_script import Command, Manager  # 导入命令行管理工具

app = Flask(__name__)  # 创建http实例


@app.route("/index/")  
def index():  
    return "创建命令"


class Run(Command):  # 编写命令类
    def run(self):  # 要执行的功能必须写在run函数中,run函数是command提供的重写函数
        app.run(debug=True, use_reloader=True)


manage = Manager(app)  # 命令行绑定应用
manage.add_command("run", Run)  # 安装命令


if __name__ == '__main__':
    manage.run()  # 启动命令行

在命令行中切换到相应的目录下执行下面命令启动项目

python main.py run

设置命令行启动后,在pycharm中直接点击运行并不能启动项目,这样一来就不能使用断点功能了,为了解决这个问题,需要相应的配置。

4、Flask-migrate 数据库控制

db.create_all()只可以创建数据库,不能进行数据库的修改,开发中时常要对模型进行修改,添加字段,仅仅是创建并不能满足开发需求,因此有了Flask-migrate。

包的安装

pip install flask-migrate

编写启动项目的命令

from flask import Flask  # 导入
from flask_script import Command, Manager  # 导入命令行管理工具
from flask_migrate import Migrate, MigrateCommand

from OAP.OAprint.models import db

app = Flask(__name__)  # 创建http实例


@app.route("/index/")
def index():
    return "创建命令"


class Run(Command):  # 编写命令类
    def run(self):  # 要执行的功能必须写在run函数中,run函数是command提供的重写函数
        app.run(debug=True, use_reloader=True)


manage = Manager(app)  # 命令行绑定应用
migrate = Migrate(app, db)  # 绑定应用和数据库
manage.add_command("db", MigrateCommand)  # 安装命令
manage.add_command("run", Run)  # 安装命令


if __name__ == '__main__':
    manage.run()  # 启动命令行

在命令行中输入命令即可操作数据库

初始化数据库,形成数据库记录文件

python main.py db init

数据库同步

python main.py db migrate

更新数据库

python main.py db upgrade

修改数据库的操作:先同步再更新数据库

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值