1

私のmanage.pyのように、djangoプロジェクトで顧客設定を使用しています。私は書きます:

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "setting.windows")
...

次のようなコードを実行するときに、さまざまな設定でプログラムを実行したい:

python manage.py runserver --settings=twoscoops.settings.local

私の settings.py には、いくつかのプライベート プログラム変数も追加します。異なる settings.py は異なる変数を使用します。私のmodels.pyまたは他のクラスファイルが私の設定ファイルで定義されたそれらの変数をインポートしたい場合。import ステートメントはどのように記述すればよいですか?</p>

つまり、もしそうなら

import twoscops.settings.local

他の設定を使用する場合、環境変数を変更することがあります。どうやってするの?

4

2 に答える 2

1

これを行う良い方法は、実際に OS で環境変数を設定し、モジュール内から Python コードでそれを確認することenvironmentです (以下を参照)。

注:ディレクトリ構造に関して、あなたに合ったものを使用してください-私<my app>/conf/envs/<some env>.pyは環境固有の設定に使用します

# twoscoops/conf/envs/current.py
"""
Imports the proper settings, based on the deployment environment's name (set
as an environment variable), defaulting to local settings.
"""
import os

from django.core.exceptions import ImproperlyConfigured


# Environments (these can be called anything you want)
ENV_LOCAL = 'local'
ENV_PROD = 'prod'
DEPLOYMENT_ENVS = (ENV_LOCAL, ENV_PROD)

# Get the deployment environment's name from the os environment
DEPLOYMENT_ENV = os.getenv('DJANGO_DEPLOYMENT_ENV', ENV_LOCAL)

# Ensure the deployment env's name is valid
if DEPLOYMENT_ENV not in DEPLOYMENT_ENVS:
    raise ImproperlyConfigured(
        u'Invalid `DJANGO_DEPLOYMENT_ENV`: {d}'.format(d=DEPLOYMENT_ENV)
    )

# Import env-specific settings

if DEPLOYMENT_ENV == ENV_LOCAL:
    # Local, native testing
    from twoscoops.conf.envs.local import *

if DEPLOYMENT_ENV == ENV_PROD:
    # Production
    from twoscoops.conf.envs.prod import *

各メイン設定モジュールに追加from twosscoops.conf.envs.current import *するだけです (1 つだけの場合もあれば、API 用に 1 つ、Web サイト用に 1 つなど)。

上記の例のデフォルトはtwoscoops.conf.envs.localです。別の env を使用したい場合 (私の例では、ちょうどローカルがあります)、シェルまたはサーバーを起動する前に (または uWSGI を起動する前に Upstart スクリプトで)、次のように環境変数prodを追加するだけです:DJANGO_DEPLOYMENT_ENV

you@your-server$ export DJANGO_DEPLOYMENT_ENV=prod
you@your-server$ python manage.py shell

Windows では、環境変数を設定することもできます (私はコマンド ラインと GUI を使用すると信じています。Google が詳しく説明します)。

于 2013-06-17T04:32:06.560 に答える
0

ローカル開発を少しチートしてexport DJANGO_VARIABLE=value-of-variable、仮想環境のactivateスクリプトの最後に置くこともできます。

本番環境では、Apache vhost 構成に次のようなものを配置する必要があることに注意してください (nginx の場合も同様であると確信しています)。

SetEnv DJANGO_VARIABLE value-of-variable

仮想ホスト構成の変数名と値の間に等号がないことに注意してください。

于 2013-06-17T13:47:00.773 に答える