上部分我们将所有的代码都写在了一个文件中,
现在我们将它们抽取出来保存在不同的文件中,方便后续的修改与维护。
抽取Config:
# config.py
from redis import StrictRedis
class Config(object):
""" 配置信息 """
DEBUG = True
_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/news_20"
SQLALSQLALCHEMYCHEMY_TRACK_MODIFICATIONS = False
REDIS_HOST = "127.0.0.1"
REDIS_POST = 6379
SECRET_KEY = "a1b2c3d4"
SESSION_TYPE = "redis"
SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_POST)
SESSION_USE_SIGNER = True
PERMANENT_SESSION_LIFETIME = 60*60*24
在使用配置信息的过程中会发现,往往会在不同的使用环境下需要不同的配置。
大体可分为三个环境:开发环境,生产环境,测试环境,
因此,通过继承的方式:
# config.py
class DevelopmentConfig(Config):
"""开发环境"""
pass
class ProductionConfig(Config):
"""生产环境"""
DEBUG = False
class UnittestConfig(Config):
"""测试环境"""
pass
# 用于传参选择环境
config_names = {
"dev": DevelopmentConfig,
"pro": ProductionConfig,
"uni": UnittestConfig
}
抽取创建/操作app:
将创建app的过程封装进函数。
将db套 SQLAlchemy 的空壳,在创建app的函数同时对db进行初始化。
config_name传参选择使用哪种环境。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import CSRFProtect
from flask_session import Session
from redis import StrictRedis
from config import config_names # 对应config.py
db = SQLAlchemy()
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config_names[config_name])
db.init_app(app)
sr = StrictRedis(host=config_names[config_name].REDIS_HOST, port=config_names[config_name].REDIS_POST)
CSRFProtect(app)
Session(app)
return app
开启服务主函数:
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from info import create_app, db
app = create_app("dev")
manager = Manager(app)
Migrate(app, db)
manager.add_command("mysql", MigrateCommand)
if __name__ == '__main__':
manager.run()
文件夹展示: