配置文件

Starlette支持配置文件的读取,并且建议将应用的配置放进配置文件中,而不是应用代码中。Starlette支持12-Factor应用标准。按照12-Factor标准,应用的配置需要保存在环境变量中,以和应用代码本身分离,并且配置本身还需要根据不同的运行环境进行分组,例如开发环境测试环境生产环境等。

Starlette通过在starlette.config中的Config类来支持配置文件的加载。Config类可以加载环境变量、.env文件以及默认值的内容,如果不满足以上内容,则会抛出异常。其中最常用的是.env文件,其中内容格式与.ini文件类似,例如以下文件示例。

DEBUG=True
DATABASE_URL=postgresql://localhost/mydatabase
SECRET_KEY=098305345093845
ALLOWED_HOSTS="127.0.0.1", "localhost"

以上示例文件可以按照以下示例来使用。

from starlette.applications import Starlette
from starlette.config import Config
from starlette.datastructures import CommaSeparatedStrings, DatabaseURL, Secret


config = Config(".env")

# 获取DEBUG项配置,转换为bool类型值,并设置默认值
DEBUG = config("DEBUG", cast=bool, default=False)
# 获取数据库连接串配置
DATABASE_URL = config("DATABASE_URL", cast=DatabaseUrl)
# 获取密文
SECRET_KEY = config("SECRET_KEY", cast=Secret)
# 获取逗号分隔的字符串
ALLOWED_HOSTS = config("ALLOWED_HOSTS", cast=CommaSeparatedStrings)

app = Starlette()
app.debug = DEBUG

其中Secret密文类可以隐藏任何不想被追踪的信息,在使用时必须使用str()进行转换才能得到密文中信息。DatabaseUrl类也具备此功能。

逗号分隔的字符串会将设定好的值按照逗号拆分成一个字符串列表,其中的内容可以通过下标来访问。

对于字符串类型的配置项,也可以不使用cast参数进行转换,这样会直接得到原始字符串的值。