我有一个Sanic应用程序,并希望从蓝图中检索app.config,因为它包含MONGO_URL,我将把它从蓝图传递给一个存储库类. 但是,我找不到如何在蓝图中获取app.config.我还检查了Flask解决方案,但它们不
但是,我找不到如何在蓝图中获取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)
我的身份证明蓝图:
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): ...我建议采用略有不同的方法,基于 12 Factor App(非常有趣的阅读,其中包括如何保护和隔离您的敏感信息的一个很好的指导).
一般的想法是将敏感和配置变量放在一个将被gitignored的文件中,因此只能在本地使用.
我将尝试介绍我倾向于使用的方法,以便尽可能接近12 Factor指南:
>使用项目变量创建一个.env文件:
MONGO_URL=http://no_peeking_this_is_secret:port/ SENSITIVE_PASSWORD=for_your_eyes_only CONFIG_OPTION_1=config_this DEBUG=True ...
>(重要)在.gitignore文件中添加.env和.env.*,从而保护您的敏感信息不会上传到GitHub.
>创建一个env.example(注意不要在开头用.命名它,因为它会被忽略).
在该文件中,您可以放置预期配置的示例,以便通过简单地复制,粘贴,重命名为.env来重现.
>在名为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) ...
>现在,您可以在实施所需的任何位置使用这些变量:
myblueprint.py:
import settings ... auth_route = Blueprint('authentication') mongo_url = settings.MONGO_URL user_repository = UserRepository(mongo_url) ...
作为终结者,我想指出这种方法是框架(甚至是语言)不可知的,所以你可以在Sanic以及Flask和你需要的任何地方使用它!