2016-04-20 2 views
2

Hier ist eine einfache Flask-Restful Ressource:Wie kann ich mit Flask-Restful auf eine Ressource mit mehreren Endpunkten zugreifen?

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') 

Meine Idee ist es, Benutzern zu erlauben, sowohl /list und /api/list zu nennen. Wenn sie die erste URL verwenden, erhalten sie eine HTML-Darstellung der Daten zurück. Wenn sie die zweite URL verwenden, erhalten sie eine JSON-Repräsentation.

Mein Problem ist, wenn ich auf die URL dieses Endpunkts an anderer Stelle im Programm zugreifen möchte. Ich kann einfach nicht url_for('list') verwenden, denn das ist immer /list zurückkehren wird, unabhängig davon, ob der Benutzer Zugriff auf http://host.example.com/list oder http://host.example.com/api/list

So wie kann ich die URL für /api/list bauen?

+2

Sie haben eine andere Ressource hinzufügen für '/ api/list' –

+0

zB api.add_resource (ListStuff, '/ list') & api.add_resource (ListStuff, '/ api/list') –

+0

Hassan, Dank für die Idee, aber tut das nicht das Gleiche wie das, was ich schon mit 'api.add_resource (ListStuff, '/ list', '/ api/list', endpoint = 'list')' 'habe? In jedem Fall würde ich die URL für '/ api/list' erstellen? –

Antwort

2

Sieht aus wie Hassan auf der richtigen Spur war - ich kann eine neue Ressource für dieselbe Klasse hinzufügen, aber einen anderen Endpunkt geben.

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" 
Verwandte Themen