Псевдоним Flask-RESTful

Я хотел бы создать псевдоним между двумя ресурсами.

from flask import Flask
from flask_restful import Api, Resource

class api_v1_help(Resource):
    def get(self):
        html_file = "API V1"
        return (html_file, 200, {'Content-Type': 'text/html; charset=utf-8'})

class api_v2_help(Resource):
    def get(self):
        html_file = "API V2"
        return (html_file, 200, {'Content-Type': 'text/html; charset=utf-8'})


app = Flask(__name__)
api = Api(app)

# API (current)
api.add_resource(api_v1_help, '/api/help')

# API v1
api.add_resource(api_v1_help, '/api/v1/help')

# API v2
api.add_resource(api_v2_help, '/api/v2/help')

if __name__ == '__main__':
    # Start app
    app.run(debug=True,port=5000)

Это дает следующую ошибку: AssertionError: отображение функции просмотра перезаписывает существующую функцию конечной точки: api_v1_help

Я могу изменить код следующим образом:

api.add_resource(api_v1_help, '/api/help', '/api/v1/help') 

но я хотел бы знать, есть ли другое решение с flask-restful для обработки псевдонима путем связывания двух конечных точек API с одной и той же функцией?

Я ищу, чтобы сгруппировать вызовы для конкретной версии API.


person t2bxl    schedule 25.05.2016    source источник
comment
Сделайте это минимально полным, а затем проверяемым примером. (минимальный код для воспроизведения вашей проблемы.)   -  person wgwz    schedule 25.05.2016


Ответы (1)


Вместо этого используйте Flask.add_url_route:

# API v1
api.add_resource(api_v1_help, '/api/v1/help')

# API v2
api.add_resource(api_v2_help, '/api/v2/help')

# API (current)
app.add_url_rule('/api/help', endpoint='api_v1_help')

По умолчанию endpoint устанавливается как имя класса представления, поэтому вы можете использовать 'api_v1_help' в качестве имени после вызова add_resource.

person Jorge Barata    schedule 25.05.2016