【问题标题】:Making a multi-tenant application on flask在烧瓶上制作多租户应用程序
【发布时间】:2019-09-14 14:26:09
【问题描述】:

我正在尝试使用 Flask 制作多租户应用程序,我一直在遵循本指南,我正在使用 Postgres sql 作为数据库:

https://medium.com/@smirnov.am/multitenancy-with-flask-6f5375a34f55

所以我的困惑是,当我尝试重定向到指定的 url 时,我不断收到内部服务器错误,当我查看日志时,这就是我得到的:

TypeError: index() got an unexpected keyword argument 'organization_name'

虽然我按照指南执行了与他完全相同的步骤,但我无法获得最终输出以表明它确实有效。

这就是我构建 app.route 的方式

@app.route("/<organization_name>/users")
def index(organization__name):
    organization_session = get_organization_session(organization__name)
    if not organization_session:
        print(404)
    users = organization_session.query(Organization).all()
    return jsonify({organization__name: [i.username for i in users]})

这就是我设置多租户的方式:


DB_URI = my postgres uri 

# Manages the the multiple dbs for the organization

@simple_cache
def get_known_organizations():
    organizations = Organization.query.all()
    return [o.name for o in organizations]


def prepare_bind(organization):
    if organization not in current_app.config['SQLALCHEMY_BINDS']:
        current_app.config['SQLALCHEMY_BINDS'][organization] = DB_URI.format(organization)
    return current_app.config['SQLALCHEMY_BINDS'][organization]


def get_organization_session(organization):
    if organization not in get_known_organizations():
        return None
    prepare_bind(organization)
    engine = db.get_engine(current_app, bind=organization)
    session_maker = db.sessionmaker()
    session_maker.configure(bind=engine)
    sesh = session_maker()
    return sesh

任何帮助将不胜感激

【问题讨论】:

    标签: python postgresql flask sqlalchemy


    【解决方案1】:

    在你的路由 organization_name 有 1 个下划线,在你的函数定义中有 2 个 organization__name。两者都必须匹配,您的路由才能正确路由。

    【讨论】:

    • 很好看的@Zweep
    猜你喜欢
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    相关资源
    最近更新 更多