我想使用烧瓶蓝图将我的烧瓶-Restful资源组织成单独的网址前缀。不管我设置了什么url前缀(在蓝图创建或注册期间),所有内容都被映射到原始路由路径。如何正确使用Restful与蓝图?
app = Flask(__name__)
api = Api(app)
api.add_resource(Building, '/<int:id>', endpoint='building')
api.add_resource(Jack, '/<int:id>', endpoint='jack')
building_api = Blueprint('building_api', __name__)
jack_api = Blueprint('jack_api', __name__)
app.register_blueprint(building_api, url_prefix='/buildings')
app.register_blueprint(jack_api, url_prefix='/jacks')我所能找到的所有文档都说现在应该可以在/buildings/<int:id>和/jacks/<int:id>上使用这些urls,但是这两个urls 404,而我可以访问在/<int:id>的第一个楼。在add_resource中对路径进行硬编码可以修复它,但它不符合url_prefix的要求。
发布于 2015-09-09 20:14:17
您需要把蓝图递给我到Api实例,而不是应用程序。
building_bp = Blueprint('buildings', __name__)
building_api = Api(building_bp)
building_api.add_resource(Building, '/<int:id>')
app.register_blueprint(building_bp, url_prefix='/buildings')发布于 2016-06-27 01:55:17
这是处理蓝图的最佳方式:
from flask import Flask, Blueprint
from flask_restful import Api, Resource, url_for
app = Flask(__name__)
api_bp = Blueprint('api', __name__)
api = Api(api_bp)
class TodoItem(Resource):
def get(self, id):
return {'task': 'Say "Hello, World!"'}
api.add_resource(TodoItem, '/todos/<int:id>')
app.register_blueprint(api_bp)您应该将Blueprint实例发送给Api
发布于 2021-07-01 17:53:03
我不知道为什么,但正如答案中提到的那样,我很难使用Blueprint。
但是这里有一个快速解决方案,我在浏览doc链接时找到了它。利用prefix参数在Api()中完成这项工作。
app = Flask(__name__)
api = Api(app, prefix='/buildings')现在,您的所有路线都将以/buildings为前缀。只需确保在可能只使用url_for('link')的地方使用/link。
我注意到的另一件奇怪的事情是,至少对我来说,它没有工作,直到我将我的路线重命名为与它们类名相同的名称。例如,Class Home(Resource)应该有一条通往/home的路由。使用/homeepage或对Home Class的任何其他路由都会导致错误。不知道是不是只有我。
https://stackoverflow.com/questions/32488098
复制相似问题