python flask config.py 常量配置

config.py

与app文件夹同级,使用层次结构的配置类

代码内容实例如下

import os
class Config: ##config子类
  DEBUG = False
  TESTING = False
  
  @staticmethod
  def init_app(app):
    pass
class ProductionConfig(Config):#继承config基类
#产品中实际使用的config模块
  SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://%s:%s@%s/%s?charset=utf8' % (MysqlUser, MysqlPass, MysqlHost, MysqlDB)
  SECRET_KEY = 'This is my key'
  SQLALCHEMY_TRACK_MODIFICATIONS = True
  UPLOAD_FOLDER = os.path.join(os.path.dirname(__file__), 'main/media')
  UPLOADED_PHOTOS_DEST = os.path.join(os.path.dirname(__file__), 'main/media/images')
class DevelopmentConfig(Config):
##开发人员使用的Config
  DEBUG = True
  SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://%s:%s@%s/%s?charset=utf8mb4' % (MysqlUser, MysqlPass, MysqlHost, MysqlDB)
  SECRET_KEY = 'This is my key'
  SQLALCHEMY_TRACK_MODIFICATIONS = True
class TestingConfig(Config):
#用于测试的config类
    TESTING = True
config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}

通过内置的字典访问不同的类

关于app /create_app 与config之间的关系

在manage.py 中我们可以看到
app = create_app('default')
create_app函数是这样定义的

from config import config
def create_app(config_name):
    app = Flask(__name__)
    CORS(app, supports_credentials=True)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)  
    ···
    return app

在这段函数中我们可以看出来
app.config.from_object(config[config_name])
config[config_name].init_app(app)
这段代码,相当于把上面我们提到的这个

config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}

中的default,添加到了app的上下文中,使得app(main)中的任何一个文件都可以不使用绝对路径,通过
import config来直接导入配置选项
这就是为什么我在后期import的时候不需要..config的原因

为什么我们这么麻烦的专门建立一个Config.py文件来把所有的常量写入到这里呢?

原因如下
1.安全性考虑:再多人团队协作中,仓库都是相互公开的,我们在代码的时候,如果直接把包含敏感信息的代码写在工作区的话,很容易造成信息的泄露,比如说MYSQLUESER PASSWORD等,还有用户的邮箱个人信息等等,统一放在一个config中进行维护,将这些敏感信息放在电脑中,在通过os模块来引用,可以大大提高安全性,不会让你的密码在代码中裸奔。
2.方便性:各种常量分开散布在各个模块的各个文件当中,需要修改的时候,需要找到含有大量工程代码的文件中进行修改,维护起来费时费力,不如把所有常量都保存在一个文件中,便于维护和修改
3.团队协作中,每个人的本地数据库的账号密码都不一样,服务器上的也不一样,所以,每个人的config也都不一样,push的时候可以跳过config模块,这样每个人pull下来的代码不包含config.py,这样就不用每次pull的时候都修改一次数据库密码了。
4.可读性高。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • jHipster - 微服务搭建 CC_简书[https://www.jianshu.com/u/be0d56c4...
    quanjj阅读 4,296评论 0 2
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,333评论 0 10
  • 模块和包 一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是...
    go以恒阅读 6,756评论 0 4
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 11,031评论 0 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,911评论 1 32

友情链接更多精彩内容