如何在python中构建配置文件?

时间:2018-11-12 06:33:04

标签: json python-2.7 config

我是新手,正在学习python,探索为基于python的框架构建配置文件的不同方法。

我遇到了using-built-in-data-structure-complicated-py,听不懂main.py。您能帮我了解main.py的外观以及如何在config.py中访问main.py的变量。

#config.py

class Config:
    APP_NAME = 'myapp'
    SECRET_KEY = 'secret-key-of-myapp'
    ADMIN_NAME = 'administrator'

    AWS_DEFAULT_REGION = 'ap-northeast-2'

    STATIC_PREFIX_PATH = 'static'
    ALLOWED_IMAGE_FORMATS = ['jpg', 'jpeg', 'png', 'gif']
    MAX_IMAGE_SIZE = 5242880 # 5MB


class DevelopmentConfig(Config):
    DEBUG = True

    AWS_ACCESS_KEY_ID = 'aws-access-key-for-dev'
    AWS_SECERT_ACCESS_KEY = 'aws-secret-access-key-for-dev'
    AWS_S3_BUCKET_NAME = 'aws-s3-bucket-name-for-dev'

    DATABASE_URI = 'database-uri-for-dev'

class TestConfig(Config):
    DEBUG = True
    TESTING = True

    AWS_ACCESS_KEY_ID = 'aws-access-key-for-test'
    AWS_SECERT_ACCESS_KEY = 'aws-secret-access-key-for-test'
    AWS_S3_BUCKET_NAME = 'aws-s3-bucket-name-for-test'

    DATABASE_URI = 'database-uri-for-dev'


class ProductionConfig(Config):
    DEBUG = False

    AWS_ACCESS_KEY_ID = 'aws-access-key-for-prod'
    AWS_SECERT_ACCESS_KEY = 'aws-secret-access-key-for-prod'
    AWS_S3_BUCKET_NAME = 'aws-s3-bucket-name-for-prod'

    DATABASE_URI = 'database-uri-for-dev'


class CIConfig:
    SERVICE = 'travis-ci'
    HOOK_URL = 'web-hooking-url-from-ci-service'

#main.py

import sys
import config

...

if __name__ == '__main__':
    env = sys.argv[1] if len(sys.argv) > 2 else 'dev'

    if env == 'dev':
        app.config = config.DevelopmentConfig
    elif env == 'test':
        app.config = config.TestConfig
    elif env == 'prod':
        app.config = config.ProductionConfig
    else:
        raise ValueError('Invalid environment name')

    app.ci = config.CIConfig

什么是app.configapp.ci?如何使用?

  1. 此外,还有什么其他最可行的pythonic方法来管理配置文件?
  2. 如果我有多组配置文件/凭据(用户名密码),我该如何管理它们?
  3. 是否可以对包含凭据的文件进行任何加密?

对我来说将是一个很好的学习。

1 个答案:

答案 0 :(得分:1)

这是一个如何使用配置文件的小例子

class Config:
  APP_NAME='myapp'
  ADMIN='admin'

class DevelopmentConfig(Config):
  DEBUG = True
  ADMIN = 'dev_admin'

class ProductionConfig(Config):
  DEBUG = False

def main():
  config = ProductionConfig # Change to DevelopmentConfig to experiment

  # You may now use your config where you want
  print(config.DEBUG)
  print(config.ADMIN)

if __name__ == "__main__":
  main()

此示例不像您的示例那样使用命令行参数,但应该为您提供一个构建配置文件并使用它们的好主意。

在您的示例中,app.ci是指持续集成(CI)环境的配置。