簡體   English   中英

Django,在wsgi.py中使用條件設置模塊

[英]Django, use conditional settings module in wsgi.py

我在django項目中使用的是設置模塊,而不是單個設置文件。 這意味着在我的wsgi.py文件中,我有類似以下內容:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.prod")os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.dev")

取決於我的環境。 我真的很希望能夠在配置文件中設置一個變量,這樣我每次進入產品時都不必進入該文件並對其進行更改。

你說的沒什么大不了的? 好吧,很容易忘記,然后因為應用程序處於開發環境中而使我的應用程序不穩定。 我還將在我應用程序的其他位置使用此配置變量,因此我有一個“全局”標志,可將我的應用程序設置為生產或開發設置。

那么,如何創建三個設置文件:

  • settings.py(母版)
  • settings_dev.py(覆蓋開發服務器的某些設置)
  • settings_prod.py(覆蓋生產服務器的某些設置)

settings.py文件的末尾檢查DEBUG=True然后導入settings_dev.py否則settings_prod.py

settings.py:

----
try:
    if DEBUG:
        from settings_dev import *
    else:
        from settings_prod import *
except ImportError:
    pass

使用這種方法,您只需要設置:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

現在,不要說如果我忘記更改特定服務器的DEBUG值該怎么辦。 那么其他的解決辦法是,有兩個不同的版本庫添加settings_prod.py在混帳忽略開發庫列表,並添加settings_dev.py在混帳忽略生產列表。 始終在settings_prod.py設置DEBUG=False ,在settings.py文件中settings_prod.py DEBUG=True ,然后在settings.py文件的末尾執行以下操作:

try:
    from settings_dev import *
except ImportError:
    try:
        from settings_prod import *
    except ImportError:
        pass

您還可以使用環境變量(或計算機名或用戶名)來區分不同的計算機。 最好將其設置在調試器上,而不是在生產環境中設置,這樣就不會忘記它。 沿途

if "yes" == os.environ.get("DJANGO_DEBUG_ENABLED"): 
    DEBUG = True
    # or 
    from settings_dev import *
else:
    DEBUG = False
    # or 
    from settings_prod import *

或者,您可以將不屬於存儲庫的文件放到那里,並檢查其存在/不存在,或從settings_local.py導入DEBUG

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM