你如何在 Django 中为每个应用程序设置不同的设置?
Posted
技术标签:
【中文标题】你如何在 Django 中为每个应用程序设置不同的设置?【英文标题】:How do you have different settings per app in Django? 【发布时间】:2016-06-18 21:57:19 【问题描述】:如何在 Django 中为每个应用设置不同的设置?例如,我有 2 个应用程序:
internal_api external_api他们需要对 JWT 令牌的过期增量进行不同的设置。我正在使用一个名为 djangorestframework-jwt 的 django-rest-framework
插件
internal_api 需要设置:
JWT_AUTH =
'JWT_EXPIRATION_DELTA': datetime.timedelta(hours=12),
external_api 需要设置:
JWT_AUTH =
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
【问题讨论】:
为什么不在同一个设置文件中创建两个不同的设置,一个叫做 JWT_AUTH_EXT,另一个叫做 JWT_AUTH_INT(或类似的东西)? 因为当djangorestframework-jwt
初始化设置时,它只寻找添加名为JWT_AUTH
的设置,其他任何内容都不会导入设置。 github.com/GetBlimp/django-rest-framework-jwt/blob/master/… 第 53 行显示了这些设置存储为 api_settings
的位置。那些api_settings
是库的其余部分引用的设置...
【参考方案1】:
您可以在运行时在您需要的特定应用程序中以特定于模块的方式import
Django 设置。你这样做:
from django.conf import settings
from internal_api import internal_api_settings
settings.configure(default_settings=internal_api_settings)
其中internal_api_settings
将是internal_api
中指定JWT_AUTH
值的模块。我相信您可以在settings.configure()
电话中更加具体并实际指定:
settings.configure(JWT_AUTH=internal_api_settings.settings_dictionary)
settings_dictionary
是您要传递到设置中的值。
【讨论】:
我尝试了上述方法,但得到了RuntimeError: Settings already configured.
另外,Django 文档说不要这样做...docs.djangoproject.com/en/1.9/topics/settings/…
另见:docs.djangoproject.com/en/1.9/topics/settings/…
我相信如果你在你的应用目录中使用 settings.py 是可以的。他们大多只是不希望你这样做。
settings.configure
只能运行一次。即使在settings.py
文件中也无法运行。在这样做时,它还会重写应用程序其余部分的设置。以上是关于你如何在 Django 中为每个应用程序设置不同的设置?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 中为 celery beat 设置不同的工作日/周末时间表?
如何在(Django GeoIP)中为每个国家/地区显示广告
如何在 Django 中为 WhiteNoise 5.1.0 设置 wsgi.py 文件?