在Flask Restplus中注册的第二个蓝图不会以炫耀的姿态出现

在Flask Restplus中注册的第二个蓝图不会以炫耀的姿态出现,flask,flask-restplus,Flask,Flask Restplus,鉴于此Restplus应用程序: from flask import Blueprint, Flask from flask_restplus import Api, Resource base_api_blueprint = Blueprint('base_api', __name__) base_api = Api(base_api_blueprint) bff_api_blueprint = Blueprint('bff_api', __name__) bff_api = Api(bf

鉴于此Restplus应用程序:

from flask import Blueprint, Flask
from flask_restplus import Api, Resource

base_api_blueprint = Blueprint('base_api', __name__)
base_api = Api(base_api_blueprint)

bff_api_blueprint = Blueprint('bff_api', __name__)
bff_api = Api(bff_api_blueprint)

@base_api.route('/base', endpoint='base-endpoint')
class BaseResource(Resource):
    def get(self):
        return {"from":"base"}


@bff_api.route('/bff', endpoint='bff-endpoint')
class BffResource(Resource):
    def get(self):
        return {"from":"bff"}

app = Flask(__name__)
app.register_blueprint(base_api_blueprint)
app.register_blueprint(bff_api_blueprint)
api = Api(app)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, debug=True)
当我在
http://localhost:8080/
我看到了
base\u api\u blueprint
的招摇过市,但
bff\u api\u blueprint
的招摇过市。如果我颠倒了
register\u blueprint
调用的顺序(因此先注册
bff\u api\u blueprint
),则会发生相反的情况->bff\u api\u blueprint的招摇过市显示,而
base\u api\u blueprint
没有任何内容

不管招摇过市者怎么说,这两个蓝图都是可操作的,即它们返回HTTP响应


如何将这两个蓝图“合并”为一个?

从您的代码中,如果您想要合并文档,那么您将使用一个Api实例,如下所示:

from flask import Blueprint, Flask
from flask_restplus import Api, Resource

base_api_blueprint = Blueprint('base_api', __name__)
# base_api = Api(base_api_blueprint)
api = Api(base_api_blueprint, doc="/combined/") #the end point to your combined documentation api

base_ns = api.namespace('base_api', description='Base API')
bff_ns = api.namespace('bff_api', description='Bff API')

# bff_api_blueprint = Blueprint('bff_api', __name__)
# bff_api = Api(bff_api_blueprint)

@base_ns.route('/base', endpoint='base-endpoint')
class BaseResource(Resource):
    def get(self):
        return {"from":"base"}


@bff_ns.route('/bff', endpoint='bff-endpoint')
class BffResource(Resource):
    def get(self):
        return {"from":"bff"}

app = Flask(__name__)
app.register_blueprint(base_api_blueprint)
# app.register_blueprint(bff_api_blueprint)
api = Api(app)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, debug=True)
此方法还使用名称空间,现在您的端点将如下所示:

/combined/
/base_api/base
/bff_api/bff

如果您使用蓝图组织了项目,则可以将相同的api实例导入到项目的其他部分。从中,名称空间的模式与Flask的蓝图相同

为了让两个蓝图都显示在各自的招摇过市页面上,您需要在蓝图定义中使用“url\u prefix”参数,如下所示:

from flask import Blueprint, Flask
from flask_restplus import Api, Resource

base_api_blueprint = Blueprint('base_api', __name__, url_prefix="base_api")
base_api = Api(base_api_blueprint)

bff_api_blueprint = Blueprint('bff_api', __name__, url_prefix="bff_api")
bff_api = Api(bff_api_blueprint)
每个蓝图都有一个招摇过市的页面,可以在和上找到


另一方面,如果您希望两个端点都以相同的姿态出现,那么方法是使用一个蓝图和多个名称空间。

我使用Flask Restplus名称空间成功地修改了这个问题,但将这个问题留在这里,希望可以教给我一些东西:)有解决方案吗?我也有同样的问题,不知道是坚持使用蓝图还是切换到名称空间。从未找到解决方案伙伴,抱歉。