我有一个Flask应用程序,其中包含用作业务逻辑服务层的模块。其中之一是用户模块。该模块与多个后端数据源交互,例如MongoDB,OpenStack Keystone等。
我很好奇最苛刻的" Pythonic"管理这些模块配置的方法是。例如,在C中,创建一个" context"然后将其传递给各种功能。如果要连接到其他数据库,则只需创建一个新上下文并将其传递给下一个函数。
作为一个例子......
class BaseConfig(object):
MONGODB_URL = '127.0.0.1'
MONGODB_PORT = 27017
def mongodb_connect():
return MongoClient(
BaseConfig.MONGODB_URL,
BaseConfig.MONGODB_PORT
)
class User(object):
def __init__(self, user_id):
self.user_id = user_id
self.mongodb_client = mongodb_connect()
self.mongo_doc = self.mongo_client.auth.users.find_one({'id': self.user_id})
self.email = self.mongo_doc['email']
self.fname = self.mongo_doc['fname']
self.lname = self.mongo_doc['lname']
self.mongodb_client.close()
这种设计在灵活性方面没有多大帮助。如果你想得到一个"用户"从'127.0.0.1'
托管的数据库以外的数据库中,除了更新BaseConfig
类之外别无选择。此外,向User
类添加参数似乎不正确,因为......
current_user = User('1234', database_ip='192.168.0.5')
...没有"感觉"对。为什么User
类需要知道数据库IP?
我已经意识到像ConfigParser这样的东西,但同样的基本问题在于有一个配置"对象"你引用了。我只是想确保这是解决这个问题的可接受方式,还有其他替代方法。