如何使用 Flask REST JSON 模块为所有路由添加前缀?

时间:2021-03-20 09:56:31

标签: python flask

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 前缀?

2 个答案:

答案 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
相关问题