【问题标题】:django settings.py for pythonanywherepythonanywhere的django settings.py
【发布时间】:2014-12-14 02:14:14
【问题描述】:

我有 django 应用程序,我在本地开发并部署到 pythonanywhere。

Local Setting.py 包含 sqlite-db、本地静态路径等。pythonanywhere 上的 Setting.py 包含 mysql-db、静态 cdn 链接等。

我想在我的 git 中有一个设置文件,并进行一些这样的检查

if host_type=='pythonanywhere':
    DATABASES = { "default": { "ENGINE": "django.db.backends.mysql",

settings.py 的最佳实践在哪里?

pythonanywhere 提供了哪些 os.environ?

【问题讨论】:

    标签: django-settings django-staticfiles pythonanywhere


    【解决方案1】:

    我一直在我的 pythonanywhere 帐户上使用python-dotenv(来自 pip)和一个 ~/.env 文件(从 gi​​t 中排除)。

    然后在我的settings.py中:

    from dotenv import load_dotenv
    load_dotenv()
    SECRET_KEY = os.getenv('DJANGO_SECRET_KEY')
    

    这意味着 pythonanywhere 唯一唯一的文件是 .env 文件,并且相同的方法在本地工作,并且(直接读取 env vars 而不是使用 dotenv)在 Heroku 上,其中从 git 中排除的 settings.py 文件是不可能的。

    【讨论】:

      【解决方案2】:

      PythonAnywhere 没有提供用于设置环境变量的 UI,尽管您可以编辑 /home/yourusername/.bashrc 文件并使用

      在其中设置一个
      export MY_ENV_VAR="something"
      

      根据您的问题,我猜您想避免将数据库设置存储在版本控制中。因此,作为环境变量的替代方法,我使用的一种技术是在版本控制之外创建一个包含自定义设置的文件:

      echo "production_settings.py" >> .gitignore
      

      在 settings.py 中:

      #... default dev settings
      DATABASES = { "default": {"ENGINE": "django.db.backends.sqlite3" 
      #...
      try:
          from production_settings import DATABASES
      except ImportError:
          pass
      

      因此,在 PythonAnywhere 上,您可以将生产设置保存在名为 production_settings.py 的文件中,而在您的开发机器上,您什么也不做。

      您也可以使用此方法在服务器上设置自定义SECRET_KEY,这将是一个很好的安全实践...

      【讨论】:

      • 一个小补充。 “production_settings.py”应该和“settings.py”放在同一个文件夹,或者你应该在PROJECT_ROOT(和其他路径)计算中考虑它的路径。
      猜你喜欢
      • 2012-09-28
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2015-05-18
      • 2020-10-30
      • 2013-05-24
      • 2015-07-23
      相关资源
      最近更新 更多