使用Pydantic管理Django设置。
项目描述
django-pydantic-settings
使用Pydantic设置管理简化Django设置配置。
这是一个仍在进行中的工作,但它读取标准的DJANGO_SETTINGS_MODULE环境变量(默认为pydantic_settings.settings.PydanticSettings),以加载pydantic_settings.Settings的子类。所有设置(在pydantic_settings.Settings中定义)都可以通过环境变量进行覆盖。使用特殊的DatabaseSettings类,可以通过DSN轻松配置多个数据库。
截至django-pydantic-settings 0.6.0版本,现在支持Django 4.0,但作为结果,Python 3.6和3.7的支持已取消。Python <3.8仍然可以使用版本0.5.0及以下版本,以及Django 3.2.x及以下版本;Python 3.6.0需要django-pydantic-settings <0.4.0。目前,django-pydantic-settings已在Python 3.8、3.9和3.10以及Django 2.2、3.0、3.1、3.2和4.0上进行测试。
安装 & 设置
安装django-pydantic-settings
pip install django-pydantic-settings
修改您的Django项目的manage.py
文件以使用django-pydantic-settings,它应该看起来像这样
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import sys
from pydantic_settings import SetUp
def main():
"""Run administrative tasks."""
SetUp().configure()
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == "__main__":
main()
您的wsgi.py
和/或asgi.py
文件也需要进行类似的修改,并看起来像这样
from django.core.wsgi import get_wsgi_application
from pydantic_settings import SetUp
SetUp().configure()
application = get_wsgi_application()
SetUp
类会自动查找标准的 DJANGO_SETTINGS_MODULE
环境变量,读取它,确认它指向一个存在的 Python 模块,然后加载该模块。您的 DJANGO_SETTINGS_MODULE
变量应该指向一个 pydantic_settings.settings.PydanticSettings
子类(尽管技术上任何定义了返回符合 Django 设置要求的 Python 字典的 dict()
方法的 Python 类都可以工作)。调用 configure()
方法后,将使用指定的模块来配置项目的 Django 设置。
如果您的项目使用一个包来指定多个不同的设置类,只需将 DJANGO_SETTINGS_MODULE
设置为您希望使用的设置类的完整路径。例如,给定以下目录结构
my_project/
├─ settings/
│ ├─ __init__.py
│ ├─ base.py
│ ├─ local.py
│ ├─ production.py
├─ my_app/
要使用 local.py
中的名为 MyLocal
的设置类,您应将您的 DJANGO_SETTINGS_MODULE
设置为 my_project.settings.local.MyLocal
。
必需的设置
要使用 django-pydantic-settings 与 Django 一起使用,无需配置任何设置。Django 所定义的所有可能设置(设置参考)都在 pydantic_settings.settings.PydanticSettings
类中配置,使用 Django 提供的正常默认值或合理的计算值。值得考虑的设置有 ROOT_URLCONF
和 WSGI_APPLICATION
,除非另行指定,否则将根据您的 DJANGO_SETTINGS_MODULE
进行计算,假设您正在使用由 django-admin.py startproject
提供的默认 Django 项目布局。例如,如果您的 DJANGO_SETINGS_MODULE
设置为 my_awesome_project.settings.PydanticSettingsSubclass
,那么 ROOT_URLCONF
和 WSGI_APPLICATION
将分别设置为 my_awesome_project.urls
和 my_awesome_project.wsgi
。此默认行为可以通过在您的 PydanticSettings
子类中指定 ROOT_URLCONF:str = 'the_actual_urlconf'
和 WSGI_APPLICATION:str = 'the_actual_wsgi_file.application'
来覆盖。或者,您也可以设置 BASE_DIR
,这将用于代替 DJANGO_SETTINGS_MODULE
。
另一个值得考虑的设置是 SECRET_KEY
。默认情况下,SECRET_KEY
使用 Django 自身的 get_random_secret_key()
函数自动生成。这将正常运行,但是因为它会在每次 PydanticSettings
子类实例化时重新计算,所以如果您使用 Django 的认证并且不希望在服务器重启时丢失会话,则应将其设置为静态值。
数据库配置
默认数据库配置可以通过名为 DATABASE_URL
的环境变量进行配置,其中包含 DSN(数据源名称)字符串。
支持从 Google Cloud Run 内部连接到 Google Cloud SQL 数据库;DatabaseDsn
类型将检测并自动转义形式为 postgres://username:password@/cloudsql/project:region:instance/database
的 DSN 字符串,以便可以正确处理。
或者,您可以使用 DATABASES
设置(在 PydanticSettings
子类或通过 DJANGO_DATABASES
环境变量中)一次性设置所有数据库。
def MySettings(PydanticSettings):
DATABASES = {"default": "sqlite:///db.sqlite3"} # type: ignore
还可以使用具有指向 DATABASES
字典中数据库别名的 configure_database
参数的 Field
以与默认的 DATABASE_URL
配置相同的方式通过环境变量配置额外的数据库连接。
from pydantic_settings import PydanticSettings
from pydantic_settings.database import DatabaseDsn
def MySettings(PydanticSettings):
secondary_database_dsn: Optional[DatabaseDsn] = Field(
env="SECONDARY_DATABASE_URL", configure_database="secondary"
)
例如,settings_test/database_settings.py
文件具有以下配置的设置子类,并在直接运行时输出对 DATABASES
设置的更改。
❯ DATABASE_URL=postgres://username:password@/cloudsql/project:region:instance/database SECONDARY_DATABASE_URL=sqlite:///foo python settings_test/database_settings.py
{'default': {'ENGINE': 'django.db.backends.postgresql',
'HOST': '/cloudsql/project:region:instance',
'NAME': 'database',
'PASSWORD': 'password',
'USER': 'username'},
'secondary': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'foo'}}
Sentry 配置
django-pydantic-settings 为 Django 项目配置使用 Sentry 提供了内置功能。使用它的最简单方法是继承自 pydantic_settings.sentry.SentrySettings
而不是 pydantic_settings.settings.PydanticSettings
。这会添加 SENTRY_DSN
设置,它使用 pydantic_settings.sentry.SentryDsn
类型。这将自动根据 DJANGO_SENTRY_DSN
环境变量进行设置,并期望一个 Sentry DSN(显然)。它验证提供的 DSN 是一个有效的 URL,然后自动使用内置的 DjangoIntegration 初始化 Sentry SDK。使用此功能需要安装 sentry-sdk
,如果安装了 django-pydantic-settings[sentry]
,则会自动包含它。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
哈希 用于 django_pydantic_settings-0.7.0-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 983a32c94179e8032b2d9e9e13ae798a492b9936d93aeb50419db67f8897a719 |
|
MD5 | bf451215ae3357a559ca847584e447b4 |
|
BLAKE2b-256 | 948133428394fb504907c409a95834acc8b67d9dd3fc2d7716cac735e80bc506 |