在同一前缀上注册多个restplus蓝图不起作用

时间:2019-12-09 16:03:09

标签: python flask flask-restplus

因此,我正在使用Flask-RestPlus构建API,并使用蓝图将代码分成较小的块,但是当尝试注册多个API端点(提供相同的URL前缀)时,只有一个蓝图注册。

蓝图模板:

from flask import Blueprint
from flask_restplus import Api, Resource

tmpl_bp = Blueprint('templates_api', __name__)
api = Api(tmpl_bp)

ns_tmpl = api.namespace('templates', description='Templates operations')

@ns_tmpl.route('/')
class Templates(Resource):
    def get(self):
        return "All templates"

    def post(self):
        return "Added/updated template"

蓝图渲染:

from flask import Blueprint
from flask_restplus import Api, Resource

rend_bp = Blueprint('render_api', __name__)
api = Api(rend_bp)

ns_render = api.namespace('render', description='Render actions')

@ns_render.route('/')
class Render(Resource):
    def post(self):
        return "Rendering everything"

发生注册的主要应用代码:

from flask import Flask, render_template

from api.templates import tmpl_bp
from api.render import rend_bp

app = Flask(__name__)

app.register_blueprint(tmpl_bp, url_prefix="/api/v1")
app.register_blueprint(rend_bp, url_prefix="/api/v1")


@app.route('/')
def home():
    return "This is the main page"

生成的Swagger API: enter image description here

我希望模板和渲染蓝图分别以/api/v1//api/v1/templates的形式在/api/v1/render上提供。但是每次只有一个注册。

如何使两个蓝图使用相同的前缀?

1 个答案:

答案 0 :(得分:0)

您无需使用蓝图,只需使用flask_restplus命名空间即可。
Flask-RESTPlus提供了一种使用与Flask蓝图几乎相同的模式的方法。主要思想是将您的应用拆分为可重用的命名空间。

from flask import Flask, render_template
from flask_restplus import Resource, Api
from api.templates import tmpl_bp
from api.render import rend_bp

app = Flask(__name__)
api = Api(app)

api.add_namespace(tmpl_bp, path="/api/v1/templates")
api.add_namespace(rend_bp, path="/api/v1/render")


@api.route('/')
def home():
   return "This is the main page"

您可以在https://flask-restplus.readthedocs.io/en/stable/scaling.html

中找到更多详细信息