【问题标题】:Per-method routes on flask-restfulflask-restful 上的按方法路由
【发布时间】:2015-03-07 07:27:27
【问题描述】:

我正在使用 flask-restful 构建一个 RESTful API,但遇到了一个小问题。

基本上,我需要确保某些方法仅在提供必需参数时才有效,而某些其他方法仅在提供参数时才有效。

例如:

from flask import jsonify
from flask.ext import restful

api = restful.Api()
class TestResource(restful.Resource):
    def get(self, some_id=None):
        '''GET takes an optional parameter'''
        if some_id:
            return jsonify(something1)
        else:
            return jsonify(something2)

    def post(self):
        '''POST doesn't take any params'''
        #do stuff
        return jsonify(something3)

    def put(self, some_id):
        '''PUT has a mandatory argument'''
        #do stuff
        return jsonify(something4)

restful.add_resource(TestResource, '/testresource/', '/testresource/<string:some_id>')

现在,requests.get('http://mydomain.tld/testresource')requests.get('http://mydomain.tld/testresource/1') 都可以正常工作,但 requests.post('http://mydomain.tld/testresource/1') 会导致 Python 错误 (TypeError: post() takes only 1 argument (2 given)),从而导致 flask-restful 返回 HTTP 500 响应。

虽然我可以为所有方法设置一个可选参数并在每个方法中处理它,但这似乎是一个常见的用例,flask-restful 似乎已经为此内置了一个解决方案。

如何使用flask-restful 处理每个方法的路由?

【问题讨论】:

    标签: python rest flask flask-restful


    【解决方案1】:

    我过去解决这个问题的方法是创建 2 个资源:

    api.add_resource(TestResrouces, '/testresource/')
    api.add_resource(TestResource, '/testresource/<string: some_id>')
    

    然后您将需要创建 2 个类。然后将您的 get/post/put 代码放入函数等...

    class TestResrouces(restful.Resource):
        def get(self):
            response = some_function()
            jsonify(something1=response)
    
    class TestResrouces(restful.Resrouce):
        def get(self, some_id):
            some_function(some_id)
            jsonify(something1=response            
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2014-02-18
      • 2011-03-31
      相关资源
      最近更新 更多