3

我有 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?

4

2 回答 2

5

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在服务器上设置自定义,这将是一个很好的安全实践......

于 2014-10-19T18:23:46.480 回答
2

我一直python-dotenv在我的 pythonanywhere 帐户上使用(来自 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 文件是不可能的。

于 2019-09-06T22:40:27.407 回答