flask-rest-jsonapi quickstart 表明您可以像这样创建 route()
:
api.route(PostList, 'post_list', '/posts')
api.route(PostDetail, 'post_detail', '/posts/<int:id>')
但我希望我的所有路由都类似于 /api/posts
和 /api/poss/<int:id>
并且我想避免在每个 /api
中重复 route()
部分。当我在这里尝试使用蓝图时,如下所示:
api_bp = Blueprint('API', __name__, url_prefix='/api')
api = Api(app, api_bp)
api.route(PostList, 'post_list', '/posts')
api.route(PostDetail, 'post_detail', '/posts/<int:id>')
app.register_blueprint(api_bp)
端点仍然是 /posts
而不是 /api/posts
。如何为所有路由正确设置 URL 前缀?
答案 0 :(得分:1)
阅读关于 Github 的讨论,请执行以下操作:
# Create blueprint
api_bp = Blueprint('API', __name__, url_prefix='/api')
# Create Api instance only passing the blueprint
api = Api(blueprint=api_bp)
# register routes
api.route(PostList, 'post_list', '/posts')
api.route(PostDetail, 'post_detail', '/posts/<int:id>')
# initialize Api instance to App
api.init_app(app)
不要忘记视图名称会改变。即视图 'post_list'
变成 'API.post_list'
所以你必须调整你的方案,而不是你的路线声明。这也在链接的 Github 讨论中进行了讨论。
答案 1 :(得分:0)
你可以在这里使用 Flask 和 Flask-RESTful。你只需要先创建flask APP并配置带前缀的Flask-RESTful API即可。
这是例子
from flask import Flask, request
from flask_restful import Api
app = Flask(__name__)
api = Api(app, prefix="/api")
现在您可以将资源添加到 api.route 如下
import types
api.route = types.MethodType(api_route, api)
def api_route(self, *args, **kwargs):
"""Add resource to the api route"""
def wrapper(cls):
self.add_resource(cls, *args, **kwargs)
return cls