路由

在上一遍文章中,我使用了 Flask 的视图函数来定义所有的路由。

Flask-RESTful 提供了一个 Resource 基础类,它能够定义一个给定 URL 的一个或者多个 HTTP 方法。例如,定义一个可以使用 HTTP 的 GET, PUT 以及 DELETE 方法的 User 资源,你的代码可以如下:

  1. from flask import Flask
  2. from flask.ext.restful import Api, Resource
  3.  
  4. app = Flask(__name__)
  5. api = Api(app)
  6.  
  7. class UserAPI(Resource):
  8. def get(self, id):
  9. pass
  10.  
  11. def put(self, id):
  12. pass
  13.  
  14. def delete(self, id):
  15. pass
  16.  
  17. api.add_resource(UserAPI, '/users/<int:id>', endpoint = 'user')

add_resource 函数使用指定的 endpoint 注册路由到框架上。如果没有指定 endpoint,Flask-RESTful 会根据类名生成一个,但是有时候有些函数比如 url_for 需要 endpoint,因此我会明确给 endpoint 赋值。

我的待办事项 API 定义两个 URLs:/todo/api/v1.0/tasks(获取所有任务列表),以及 /todo/api/v1.0/tasks/<int:id>(获取单个任务)。我们现在需要两个资源:

  1. class TaskListAPI(Resource):
  2. def get(self):
  3. pass
  4.  
  5. def post(self):
  6. pass
  7.  
  8. class TaskAPI(Resource):
  9. def get(self, id):
  10. pass
  11.  
  12. def put(self, id):
  13. pass
  14.  
  15. def delete(self, id):
  16. pass
  17.  
  18. api.add_resource(TaskListAPI, '/todo/api/v1.0/tasks', endpoint = 'tasks')
  19. api.add_resource(TaskAPI, '/todo/api/v1.0/tasks/<int:id>', endpoint = 'task')