質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

754閲覧

djnago-environにおける環境変数の取り扱い方法について

ruuuu

総合スコア168

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/05 12:12

djnago-environについてQiita記事を参照していましたら、「env = environ.Env()を行った段階でenvに文字列リテラルを渡す事でホスト側の環境変数が取得可能」との記述がありました。
しかし、英語に慣れていないのもあり、GitHub公式ドキュメントを探しても、このようなことがどの部分に記載されているのかが、分かりませんでした。
今後、こういったライブラリのドキュメントを読み込む際の参考にもしたいと考えている為、ドキュメントに詳細に記載されている場所がありましたら教えて頂けましたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問自体に対する回答

強いて上げるとすれば、「Feature Support」というセクションにある以下の説明が該当するかな?と思います。

Fill os.environ with .env file variables

※雑な翻訳: os.environ.envファイルの中身を詰める

これを「read_envなどで読み込む前からos.environ相当にEnvからアクセスできる」と考えれば、一応理屈に合うかなと思います。

補足: コードとしての実態

以下は、実際にdjango-environの挙動を今回の質問に関する部分に絞って追ったものです。

django-environのような単機能ライブラリだと、ソースを読むのも一つの手かなと思うので、
ドキュメントの記載確認をする以外の選択肢として捉えてもらえれば。

django-environのEnvクラス

django-environEnvクラスはここで定義されています。

※以下、ソースから回答としてピックアップする主要な箇所のみを抜粋

python

1import os 2 3## 略 4 5class Env(object): 6 ## 略 7 ENVIRON = os.environ 8 9 def bool(self, var, default=NOTSET): 10 """ 11 :rtype: bool 12 """ 13 return self.get_value(var, cast=bool, default=default) 14 15 def get_value(self, var, cast=None, default=NOTSET, parse_default=False): 16 ## 略 17 try: 18 value = self.ENVIRON[var] 19 except KeyError: 20 if default is self.NOTSET: 21 error_msg = "Set the {0} environment variable".format(var) 22 raise ImproperlyConfigured(error_msg) 23 24 value = default 25 ## 略 26 return value

実際の利用における動き

django-environで通常取得に使うメソッドは全部get_valueを内部利用しているのですが、
ここで参照しているのはself.ENVIRONというプロパティです。

このプロパティはクラス変数となっており、Envクラスの定義を読むタイミングで環境変数の辞書であるos.environがセットされています。

そのため、environ.Env()などのようにインスタンスを生成した時点で、もともとの環境変数を参照可能になっています。

投稿2020/10/08 12:09

attakei

総合スコア2738

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruuuu

2020/10/09 04:22

ご回答ありがとうございます。 >ソースを読むのも一つの手かなと思うので、 ドキュメントの記載確認をする以外の選択肢として捉えてもらえれば。 こちらですが、ライブラリのコードは難しく感じることが多く、把握が難しいことから、あまりソースから読み取るということは選択肢にいれていなかったのですが、ドキュメントのみではなくソースから理解をするという部分もきちんと理解する為には、必要にはなってきますよね...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問