美文网首页
Flask app.config 的配置

Flask app.config 的配置

作者: ugvibib | 来源:发表于2018-04-05 11:35 被阅读3474次

    原理如下:

    image.png

    1、通过调用自定义config.py文件中config字典,可以得到一个类,
    这个类里面定义的都是类变量,这些变量就是自定义的一些配置项。
    如下config.py : :

    import os
    
    
    BASEDIR = os.path.abspath(os.path.dirname(__file__))
    
    
    class Config:
        """base config"""
        SECRET_KEY = os.environ.get('SECRET_KEY') or 'secret key'
        SQLALCHEMY_COMMIT_ON_TEARDOWN = True
        SQLALCHEMY_TRACK_MODIFICATIONS = True
        FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN')
        
        FLASKY_MAIL_SENDED = 'jianghan@julanling.com'     # 发件人地址
        FLASKY_MAIL_SUBJECT_PREFIX = '[Flasky]'     # 邮件主题前缀
    
    
    class ProductionConfig(Config):
        """运行环境配置"""
        SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
            'sqlite:///' + os.path.join(BASEDIR, 'data.sqlite')
    ......
    
    config = {
        'development': DevelopmentConfig,
        'testing': ProductionConfig,
        'production': ProductionConfig,
        'default': DevelopmentConfig
    }
    

    2、利用Flask类,实例app,并把自定义配置传进去。
    如下app.py:

    # __name__是本文件名字,
    # Flask类里面,会根据此名字,找到app.py所在目录,即默认为根目录。
    app = Flask(__name__)
    app.config.from_object(config['testing'])
    

    3、配置原理:

    自定义配置类给到app.config。
    app.config 来自于 self.make_config()
    self.make_config() 返回的值是 config_class()
    config_class 就是Config类。
    config_class(),是config加个括号,其实就是Config()

    通过上面一系列的串联,可以看出:
    app.config,就是Config()

    之所以要在中间加一些方法,如mke_config(),是为了给Config()添加一些默认值。
    例如:根目录root_path、默认配置self.default_config等。
    如下:

        def make_config(self, instance_relative=False):
            root_path = self.root_path
            if instance_relative:
                root_path = self.instance_path
            return self.config_class(root_path, self.default_config)
    

    其实,在你在写到app.config时,就已经创建了一个带默认配置项的Config()实例。
    Config类有很多方法可以修改默认配置和添加新配置。如from_object()

    当写到 app.config.from_object(config),其实就是对默认配置的修改和添加。

    参考:很多,在网上了其他人的一些解释,然后自己再看看源码,就大概明白了。

    相关文章

      网友评论

          本文标题:Flask app.config 的配置

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