首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Flask-RESTful处理分层URI

使用Flask-RESTful处理分层URI
EN

Stack Overflow用户
提问于 2016-01-20 04:02:51
回答 1查看 293关注 0票数 0

我想要一个如下所示的RESTful应用程序接口:

代码语言:javascript
复制
example.com/teams/
example.com/teams/<team_id>
example.com/teams/<team_id>/players
example.com/teams/<team_id>/players/<player_id>
...
example.com/teams/<team_id>/players/<player_id>/seasons/<season_id>/etc

其中每个URI都可以适当地处理GET和可能的POST。

我希望能够做到以下几点:

代码语言:javascript
复制
class Team(Resource):
    def post(self):
        #Handler for /teams/
    def post(self, team_id):
        #Handler for /teams/team_id
    def post(self, team_id, player_id):
        #Handler for /teams/team_id/players/player_id

并使用:

代码语言:javascript
复制
api.add_resource(Team, '/teams/', 'teams/<team_id>/players/<player_id>')

这将不起作用,因为后续的POST处理程序会覆盖以前的。

在URL中可能存在可变数量的变量(层次结构的可变深度)的情况下,使用Flask-RESTful处理API的正确方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2016-01-20 04:14:14

Python不支持这种特定方式的方法重载。在您的代码中,您并没有重载post()函数,而是在重新定义它

基本上,post()的最后一个定义是什么,它需要3个参数,如您所见:

代码语言:javascript
复制
class Team(Resource):
    def post(self, team_id, player_id):
        # This is the final definition of post()
        # The definitions above this one do not take effect

否则,很容易通过一个具有参数默认值的方法来获得行为:

代码语言:javascript
复制
class Team(Resource):
    def post(self, team_id=None, player_id=None):
        if team_id is None and player_id is None:
            # first version
        if team_id is not None and player_id is None:
            # second version 
        if team_id is not None and player_id is not None:
            # third version

对于您的URL,Flask将传入未在URL中定义的参数的None

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34885932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档