GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

joke2k

django-environ – Django-environでは、12factorの環境変数を使ってDjangoアプリケーションを設定することができます

投稿日:

Django-environでは、12factorの環境変数を使ってDjangoアプリケーションを設定することができます。 http://django-environ.readthedocs.org

ジャンゴー環境

Django-environでは、12factorの環境変数を使ってDjangoアプリケーションを設定することができます。

このモジュールは以下のマージです:

また、

これはdjango-environをインストールする前のsettings.pyファイルです

import os
SITE_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

DEBUG = True
TEMPLATE_DEBUG = DEBUG

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database',
        'USER': 'user',
        'PASSWORD': 'githubbedpassword',
        'HOST': '127.0.0.1',
        'PORT': '8458',
    },
    'extra': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(SITE_ROOT, 'database.sqlite')
    }
}

MEDIA_ROOT = os.path.join(SITE_ROOT, 'assets')
MEDIA_URL = 'media/'
STATIC_ROOT = os.path.join(SITE_ROOT, 'static')
STATIC_URL = 'static/'

SECRET_KEY = '...im incredibly still here...'

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': [
            '127.0.0.1:11211', '127.0.0.1:11212', '127.0.0.1:11213',
        ]
    },
    'redis': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': '127.0.0.1:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
            'PASSWORD': 'redis-githubbed-password',
        }
    }
}

後:

import environ
root = environ.Path(__file__) - 3 # three folder back (/a/b/c/ - 3 = /)
env = environ.Env(DEBUG=(bool, False),) # set default values and casting
environ.Env.read_env() # reading .env file

SITE_ROOT = root()

DEBUG = env('DEBUG') # False if not in os.environ
TEMPLATE_DEBUG = DEBUG

DATABASES = {
    'default': env.db(), # Raises ImproperlyConfigured exception if DATABASE_URL not in os.environ
    'extra': env.db('SQLITE_URL', default='sqlite:////tmp/my-tmp-sqlite.db')
}

public_root = root.path('public/')

MEDIA_ROOT = public_root('media')
MEDIA_URL = 'media/'
STATIC_ROOT = public_root('static')
STATIC_URL = 'static/'

SECRET_KEY = env('SECRET_KEY') # Raises ImproperlyConfigured exception if SECRET_KEY not in os.environ

CACHES = {
    'default': env.cache(),
    'redis': env.cache('REDIS_URL')
}

read_env().envファイルへの明示的なパスを渡すこともできます。

.envファイルを作成します。

DEBUG=on
# DJANGO_SETTINGS_MODULE=myapp.settings.dev
SECRET_KEY=your-secret-key
DATABASE_URL=psql://urser:un-githubbedpassword@127.0.0.1:8458/database
# SQLITE_URL=sqlite:///my-local-sqlite.db
CACHE_URL=memcache://127.0.0.1:11211,127.0.0.1:11212,127.0.0.1:11213
REDIS_URL=rediscache://127.0.0.1:6379/1?client_class=django_redis.client.DefaultClient&password=redis-un-githubbed-password

インストールする方法

$ pip install django-environ

使い方

environ.Envenviron.Path 2つのクラスしかありenviron.Path

>>> import environ
>>> env = environ.Env(
        DEBUG=(bool, False),
    )
>>> env('DEBUG')
False
>>> env('DEBUG', default=True)
True

>>> open('.myenv', 'a').write('DEBUG=on')
>>> environ.Env.read_env('.myenv') # or env.read_env('.myenv')
>>> env('DEBUG')
True

>>> open('.myenv', 'a').write('\nINT_VAR=1010')
>>> env.int('INT_VAR'), env.str('INT_VAR')
1010, '1010'

>>> open('.myenv', 'a').write('\nDATABASE_URL=sqlite:///my-local-sqlite.db')
>>> env.read_env('.myenv')
>>> env.db()
{'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'my-local-sqlite.db', 'HOST': '', 'USER': '', 'PASSWORD': '', 'PORT': ''}

>>> root = env.path('/home/myproject/')
>>> root('static')
'/home/myproject/static'

djangoプロジェクトでの具体的な使用例については、 cookiecutter-djangoを参照してください。

サポートされるタイプ

  • str
  • ブール
  • int
  • 浮く
  • ジョソン
  • リスト(FOO = a、b、c)
  • タプル(FOO =(a、b、c))
  • dict(BAR = key = val、foo = bar)#environ.Env(BAR =(dict、{}))
  • = environ.Env(BAR =(dict(value = unicode、cast = dict(foo = float、baz = bool))、{}))dict(BAR = key = val; foo = 1.1; baz = True)
  • URL
  • パス(environ.Path)
  • db_url
    • PostgreSQL:postgres://、pgsql://、psql://またはpostgresql://
    • PostGIS:postgis://
    • MySQL:mysql://またはmysql2://
    • GeoDjangoのMySQL:mysqlgis://
    • SQLite:sqlite://
    • GeoDjangoのSPATIALITEを使用したSQLITE:spatialite://
    • Oracle:oracle://
    • PyODBC:pyodbc://
    • Redshift:redshift://
    • LDAP:ldap://
  • cache_url
    • データベース:dbcache://
    • ダミー:dummycache://
    • ファイル:filecache://
    • メモリ:locmemcache://
    • Memcached:memcache://
    • Pythonメモリ:pymemcache://
    • Redis:rediscache://
  • search_url
    • ElasticSearch:elasticsearch://
    • Solr:solr://
    • Whoosh:whoosh://
    • Xapian:xapian://
    • 単純なキャッシュ:単純://
  • email_url
    • SMTP:smtp://
    • SMTP + SSL:smtp + ssl://
    • SMTP + TLS:smtp + tls://
    • コンソールメール:consolemail://
    • ファイルメール:filemail://
    • LocMem mail:memorymail://
    • ダミーメール:dummymail://

ヒント

URLに安全でない文字を使用する

安全でない文字を使用するには、 .envファイルに設定する前にurllib.parse.encodeエンコードする必要があります。

DATABASE_URL=mysql://user:%23password@127.0.0.1:3306/dbname

参考までにhttps://perishablepress.com/stop-using-unsafe-characters-in-urls/ご覧ください

複数のredisキャッシュの場所

レディスキャッシュの場合、 複数のマスター/スレーブまたはシャードロケーションを次のように構成できます。

CACHE_URL='rediscache://master:6379,slave1:6379,slave2:6379/1'

メール設定

djangoの電子メール設定を設定するには、次のコードを使用します:

EMAIL_CONFIG = env.email_url(
    'EMAIL_URL', default='smtp://user@:password@localhost:25')

vars().update(EMAIL_CONFIG)

SQLiteのURL

SQLiteはファイルベースのデータベースに接続します。 同じURLフォーマットが使用され、ホスト名は省略され、データベースのファイル名として「ファイル」部分が使用されます。 これは、絶対ファイルパスに対して4つのスラッシュ(sqlite:////full/path/to/your/database/file.sqlite)が存在することを意味します。

テスト

$ git clone git@github.com:joke2k/django-environ.git
$ cd django-environ/
$ python setup.py test

ライセンス

Django-environはMITライセンスの下でライセンスされています – 詳細についてはLICENSE_FILEファイルを参照してください

変更ログ

0.4.4 – 21-Aug-2017

  • django-redis複数の場所(マスター/スレーブ、シャード)のサポート
  • Elasticsearch2のサポート
  • Mysqlコネクタのサポート
  • pyodbcのサポート
  • Environクラスに__contains__機能を追加する
  • フィックスパスの減算

0.4.3 – 21-Aug-2017

  • デフォルトのEnvironをos.environにロールバックする

0.4.2 – 13 – April-2017

  • Django 1.11のサポートを確認してください。
  • RedshiftデータベースURLのサポート
  • uwsgi設定のリロード問題を修正しました(#55)
  • django-redis URL(#109)のサポートを更新

0.4.1 – 13-Nov-2016

  • 安全でない文字をURLに修正する
  • 見つからない、または判読できないファイルの警告を明確にする。 @nickcatalに感謝します
  • Django 1.10のサポートを追加しました。
  • OracleのURLのサポートを修正しました。
  • django-redisのサポートを修正しました

0.4.0 – 2015年9月23日

  • 非ASCII値を修正する(Python 2.xで壊れている)
  • 新しい電子メールスキーム – smtp + sslとsmtp + tls(smtpsは廃止予定)
  • redis_cacheがdjango_redisに置き換えられました
  • タプルのサポートを追加します。 @anonymouzzに感謝します
  • データベース(django-ldapdb)のLDAP URLサポートを追加
  • psql / pgsqlのURLを修正

2014年6月3日〜3月3日

  • キャッシュURLのサポートを追加する
  • 電子メールURLサポートを追加する
  • 検索URLのサポートを追加
  • README.rstの書き換え

0.2.1 2013年4月19日

  • environ / environ.py:Env .__ call__はEnv.get_valueインスタンスメソッドを使用するようになりました。

0.2 16 – 2013年4月

  • environ / environ.py、environ / test.py、environ / test_env.txt:高度な浮動小数点解析を追加する(コンマとドット記号を使用して千と小数点を区切る)
  • README.rst、docs / index.rst:ドキュメントのTYPOを修正

0.1 02-April-2013

  • 初回リリース

クレジット







-joke2k
-, , ,

執筆者: