我有一个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):
...
答案 0 :(得分:5)
Sanic 方式......
在视图方法中,您可以从app
对象访问request
实例。因此,请访问您的配置。
@auth_route.route('/signin')
async def redirect_user(request):
configuration = request.app.config
答案 1 :(得分:2)
我建议采用略有不同的方法,基于12 Factor App(非常有趣的阅读,其中包括如何保护和隔离敏感信息的良好指南)。
一般的想法是将敏感和配置变量放在一个 gitignored 的文件中,因此只能在本地使用。
我将尝试介绍我倾向于使用的方法,以便尽可能接近12因素指南:
创建一个包含项目变量的.env
文件:
MONGO_URL=http://no_peeking_this_is_secret:port/
SENSITIVE_PASSWORD=for_your_eyes_only
CONFIG_OPTION_1=config_this
DEBUG=True
...
(重要)在.env
文件中添加.env.*
和.gitignore
,从而保护您的敏感信息不会上传到GitHub。
创建env.example
(注意不要在开头用.
命名,因为它会被忽略)。
在该文件中,您可以提供预期配置的示例,以便只需copy, paste, rename to .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
以及您需要的任何地方!
答案 2 :(得分:1)
Flask中有一个名为current_app的变量。您可以使用current_app.config["MONGO_URL"]
但我不熟悉Sanic。
答案 3 :(得分:0)
我认为你可以创建一个config.py来保存配置,就像
一样<强> config.py 强>
config = {
'MONGO_URL':'127.0.0.1:27017'
}
并在 app.py
中使用它from config import config
mongo_url = config['MONGO_URL']