繁体   English   中英

从Sanic app中的蓝图中检索配置

[英]Retrieving config from a blueprint in Sanic app

我有一个Sanic应用程序,并希望从蓝图中检索app.config ,因为它包含MONGO_URL ,我将把它从蓝图传递给一个存储库类。

但是,我找不到如何在蓝图中获取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):
    ...

Sanic方式......

在视图方法中,您可以从request对象访问app实例。 因此,访问您的配置。

@auth_route.route('/signin')
async def redirect_user(request):
    configuration = request.app.config

我建议采用一种稍微不同的方法,基于12 Factor App (非常有趣的阅读,其中包括如何保护和隔离您的敏感信息的一个很好的指导)。

一般的想法是将敏感和配置变量放在一个将被gitignored的文件中,因此只能在本地使用。

我将尝试介绍我倾向于使用的方法,以便尽可能接近12 Factor指南:

  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. 创建一个env.example (注意不要在开头用.命名它,因为它会被忽略)。
    在该文件中,您可以放置​​预期配置的示例,以便通过简单地copy, paste, rename to .env

  4. 在名为settings.py的文件settings.py ,使用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) ... 

作为终结者,我想指出这种方法是框架(甚至是语言)不可知的,所以你可以在Sanic以及Flask和你需要的任何地方使用它!

Flask中有一个名为current_app的变量。 您可以使用current_app.config["MONGO_URL"]
但我不熟悉Sanic。

我想你可以创建一个config.py来保存你的配置,就像

config.py

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

并在app.py中使用它

from config import config

mongo_url = config['MONGO_URL']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM