如何使用 Flask-Restful 访问具有多个端点的资源?
How do I access a resource with multiple endpoints with Flask-Restful?
这是一个简单的 Flask-Restful 资源:
class ListStuff(Resource):
def get(self):
stuff = SomeFunctionToFetchStuff()
if re.match('/api/', request.path):
return {'stuff': stuff}
return make_response("{}".format(stuff), 200, {'Content-Type': 'text/html'})
api.add_resource(ListStuff, '/list', '/api/list', endpoint='list')
我的想法是让用户同时调用/list
和/api/list
。如果他们使用第一个 URL,他们将取回数据的 HTML 表示。如果他们使用第二个 URL,他们将获得 JSON 表示。
我的麻烦是当我想在程序的其他地方访问此端点的 URL 时。我不能只使用 url_for('list')
,因为它总是 return /list
,无论用户访问的是 http://host.example.com/list
还是 http://host.example.com/api/list
那么如何为 /api/list
构建 URL 呢?
看起来 Hassan 走在正确的轨道上 - 我可以为同一个 class 添加一个新资源,但给它一个不同的端点。
api.add_resource(ListStuff, '/list', endpoint='list')
api.add_resource(ListStuff, '/api/list', endpoint='api-list')
>>> print('URL for "list" is "{}"'.format(url_for('list'))
>>> print('URL for "api-list" is "{}"'.format(url_for('api-list'))
URL for "list" is "/list"
URL for "api-list" is "/api/list"
这是一个简单的 Flask-Restful 资源:
class ListStuff(Resource):
def get(self):
stuff = SomeFunctionToFetchStuff()
if re.match('/api/', request.path):
return {'stuff': stuff}
return make_response("{}".format(stuff), 200, {'Content-Type': 'text/html'})
api.add_resource(ListStuff, '/list', '/api/list', endpoint='list')
我的想法是让用户同时调用/list
和/api/list
。如果他们使用第一个 URL,他们将取回数据的 HTML 表示。如果他们使用第二个 URL,他们将获得 JSON 表示。
我的麻烦是当我想在程序的其他地方访问此端点的 URL 时。我不能只使用 url_for('list')
,因为它总是 return /list
,无论用户访问的是 http://host.example.com/list
还是 http://host.example.com/api/list
那么如何为 /api/list
构建 URL 呢?
看起来 Hassan 走在正确的轨道上 - 我可以为同一个 class 添加一个新资源,但给它一个不同的端点。
api.add_resource(ListStuff, '/list', endpoint='list')
api.add_resource(ListStuff, '/api/list', endpoint='api-list')
>>> print('URL for "list" is "{}"'.format(url_for('list'))
>>> print('URL for "api-list" is "{}"'.format(url_for('api-list'))
URL for "list" is "/list"
URL for "api-list" is "/api/list"