【问题标题】:How to define a base route in Flask API routing system如何在 Flask API 路由系统中定义基本路由
【发布时间】: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')

【问题讨论】:

    标签: python api routes flask restful-url


    【解决方案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
      猜你喜欢
      • 2016-02-28
      • 2019-12-26
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 2013-10-13
      • 2020-12-09
      • 2013-11-29
      • 1970-01-01
      相关资源
      最近更新 更多