因此,我正在使用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"
我希望模板和渲染蓝图分别以/api/v1/
和/api/v1/templates
的形式在/api/v1/render
上提供。但是每次只有一个注册。
如何使两个蓝图使用相同的前缀?
答案 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
中找到更多详细信息