flask 上的每个方法路由-restful
Per-method routes on 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
到 return 一个 HTTP 500
响应。
虽然我可以为所有方法设置一个可选参数并在每个方法中处理它,但这似乎是一个常见的用例,似乎 flask-restful
已经为此内置了一个解决方案.
如何使用 flask-restful
处理每个方法的路由?
我过去解决这个问题的方法是创建 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
我正在使用 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
到 return 一个 HTTP 500
响应。
虽然我可以为所有方法设置一个可选参数并在每个方法中处理它,但这似乎是一个常见的用例,似乎 flask-restful
已经为此内置了一个解决方案.
如何使用 flask-restful
处理每个方法的路由?
我过去解决这个问题的方法是创建 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