烧瓶上的每个方法路线 - 宁静

时间:2015-02-26 11:39:33

标签: python rest flask flask-restful

我正在使用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似乎已经内置了一个解决方案。< / p>

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

1 个答案:

答案 0 :(得分: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            
相关问题