2017-04-11 10 views
3

私はSanicアプリケーションを持っており、MONGO_URLという青写真からapp.configを青写真から検索したいと思っており、それを青写真のリポジトリクラスに渡します。Sanicアプリの青写真から設定を取得

しかし、青写真でapp.configを取得する方法が見つかりませんでした。私はFlaskのソリューションもチェックしましたが、Sanicには適用されません。

マイapp.py

from sanic import Sanic 
from routes.authentication import auth_route 
from routes.user import user_route 

app = Sanic(__name__) 
app.blueprint(auth_route, url_prefix="/auth") 
app.blueprint(user_route, url_prefix="/user") 

app.config.from_envvar('TWEETBOX_CONFIG') 
app.run(host='127.0.0.1', port=8000, debug=True) 

マイauth blueprint

import jwt 
from sanic import Blueprint 
from sanic.response import json, redirect 
from domain.user import User 
from repository.user_repository import UserRepository 
... 

auth_route = Blueprint('authentication') 
mongo_url = ????? 
user_repository = UserRepository(mongo_url) 
... 

@auth_route.route('/signin') 
async def redirect_user(request): 
    ... 

答えて

1

12 Factor Appに基づいて、やや異なるアプローチを提案します(非常に興味深いあなたの機密情報を保護して隔離する方法についての素晴らしいガイドラインを提供しています。

一般的な考え方は、機密変数と構成変数をとなるファイルに配置することです。したがって、に限定され、ローカルでのみ利用できます。

私は12因子ガイドラインにできるだけ近いものにするために使用する傾向がある方法を提示しようとします:

  1. はそれであなたのプロジェクト変数と.envファイルを作成します。

    MONGO_URL=http://no_peeking_this_is_secret:port/ 
    SENSITIVE_PASSWORD=for_your_eyes_only 
    CONFIG_OPTION_1=config_this 
    DEBUG=True 
    ... 
    
  2. (重要ので、あなたの機密情報を保護し、あなたの.gitignoreファイルに.env.env.*を追加します。 GitHubにアップロードされました。

  3. .と名前を付けないように注意してください。無視されるためです)。
    このファイルでは、単にcopy, paste, rename to .envで再現可能にするために、期待される設定の例を入れることができます。settings.pyという名前のファイルに

  4. 、変数にあなたの設定ファイルを読むためにdecouple.configを使用します。

    from decouple import config 
    
    
    MONGO_URL = config('MONGO_URL') 
    CONFIG_OPTION_1 = config('CONFIG_OPTION_1', default='') 
    DEBUG = config('DEBUG', cast=bool, default=True) 
    ... 
    
  5. あなたの実装に必要な場所であればどこでも今、あなたはこれらの変数を使用することができます。

    myblueprint.py

    import settings 
    
    ... 
    auth_route = Blueprint('authentication') 
    mongo_url = settings.MONGO_URL 
    user_repository = UserRepository(mongo_url) 
    ... 
    

フィニッシャーとして、この方法はフレームワーク(さらには言語)アグノスティックだから、SanicFlaskとそれが必要な場所で使用できることを指摘したいと思います。ビューメソッド内

+0

悪い答えではありませんが、これは問題を無視し、ダニカがこの問題に関して実際に行った埋め込みを覆います。 –

+0

@TheBrewmasterこれはほとんどの場合当てはまります(私は直ちに問題を直接解決するわけではありません)。しかし、これはこの問題を解決し、おそらく設定プロセスを考慮したものです。 OPが彼の 'MONGO_URL'をgitに安全な情報をアップロードしないように保存することを許可します。 –

1

フラスコにCURRENT_APPという名前の変数があります。 current_app.config["MONGO_URL"]を使用できます。
しかし、私はSanicに精通していません。

+0

はい、残念ながらSanicは私がSanicのRequestオブジェクトである 'request'というパラメータがありましたCURRENT_APP .. – skynyrd

+1

を持っていません。また、この要求を処理しているSanicアプリケーションオブジェクトへの参照である 'app'という名前の属性があります。 – stamaimer

+1

@stamaimer実際に動作します! :)ありがとう! – puneeth

0

は、私はあなただけ

config.py

config = { 
    'MONGO_URL':'127.0.0.1:27017' 
} 

のように、設定を保存するためにconfig.pyを作成し、app.pyでそれを使用することができると思い

from config import config 

mongo_url = config['MONGO_URL'] 
+0

返信いただきありがとうございます。しかし、重要な情報をパスワードとしてPythonコードに入れたくない場合や、他の情報を分離して、継続的な統合とセキュリティのために.configファイルのように配置する必要があります。 – skynyrd

1

Sanic道...

、あなたはrequestオブジェクトからappインスタンスにアクセスすることができます。したがって、構成にアクセスします。

@auth_route.route('/signin') 
async def redirect_user(request): 
    configuration = request.app.config 
関連する問題