如何在 Flask API 路由系统中定义基本路由

Posted

技术标签:

【中文标题】如何在 Flask API 路由系统中定义基本路由【英文标题】:How to define a base route in Flask API routing system 【发布时间】:2015-01-25 05:18:00 【问题描述】:

在像 slim php 框架这样的框架中,您可以定义在所有路由中都相同的基本路由,例如 /api/v1

所以在 slim 中,我们可以对路由进行分组,而不是在每条路由中添加 /api/v1

$app->group('/api/v1', function () use ($app) 

        // Get book with ID
        $app->get('/books/:id', function ($id) 

        );

        // Update book with ID
        $app->put('/books/:id', function ($id) 

        );

        // Delete book with ID
        $app->delete('/books/:id', function ($id) 

        );

);

但在 Flask 中,我找不到一种简单的方法来分组路线。如果我必须在我调用的每个资源中写 /api/v1 怎么办?有没有办法将它们分组?

在 python 中我应该使用类似下面的东西:

class TaskListAPI(Resource):
    def get(self):
        pass

    def post(self):
        pass

class TaskAPI(Resource):
    def get(self, id):
        pass

    def put(self, id):
        pass

    def delete(self, id):
        pass

api.add_resource(TaskListAPI, '/api/v1/tasks', endpoint = 'tasks')
api.add_resource(TaskAPI, '/api/v1/tasks/<int:id>', endpoint = 'task')

【问题讨论】:

【参考方案1】:

虽然Blueprints 很棒,但您似乎正在寻找更具体的扩展,以满足您构建一个在 HTTP 方法之间轻松区分的 API 的愿望。

您可能想看看Flask-Classy,这是一个烧瓶扩展,它就是这样做的。您可以为每个资源创建一个类(就像您在伪代码中描述的那样)并在 http 方法上有所不同:

from flask_classy import FlaskView


class TaskView(FlaskView):
    def index(self):
        """Return a list of all tasks."""
        pass

    def get(self, id):
        """Get a specific task."""
        pass

    def delete(self, id):
        """Delete the task."""
        pass

TaskView.register(app)

此外,如果您有特殊情况,Flask-Classy 还支持很多customize the endpoints 的方式。

【讨论】:

【参考方案2】:

我想你正在寻找Blueprints。蓝图是将您的应用程序分成几个较小部分的好方法 - 例如,您可能有一个用于 Web 应用程序的“主”蓝图、一个用于管理界面的“管理”蓝图和一个用于 RESTful API 的“api”蓝图.

【讨论】:

据我所知蓝图使用for making application components and supporting common patterns within an application or across applications. Blueprints can greatly simplify how large applications work

以上是关于如何在 Flask API 路由系统中定义基本路由的主要内容,如果未能解决你的问题,请参考以下文章

flask 配置文件 路由 视图 模板 中间件

flask的路由的基本定义

Flask组件化开发:Blueprint(蓝图)

flask的路由

Flask框架—— 反向解析配置信息路由系统模板请求响应闪现请求扩展session

flask笔记(七):简单路由设置