Учтите, что у меня есть два класса Resource
:
class UserView(Resource):
def get(self, id):
...
def post(self):
...
def put(self, id):
...
def delete(self, id):
...
class AnotherUserView(Resource):
def get(self):
...
def put(self):
...
def delete(self):
...
api.add_resource(UserView, '/user/<int:id>')
api.add_resource(AnotherUserView, '/user')
Учитывая приведенный выше код, для всех методов GET
, PUT
и DELETE
UserView
требуется параметр пути id
. Поэтому UserView
сопоставляется с маршрутом /user/<int:id>
. Однако методу POST
не нужен параметр пути id
, но он включен в маршрут, предоставляющий параметр id
, что может привести к путанице.
Итак, теперь я думаю, есть ли способ указать, какие методы разрешены для определенного маршрута (или конечной точки), например, что мы можем сделать с Flask
: @app.route('/user/<int:id>', methods=['GET', 'PUT', 'DELETE']
.
Ожидается, что я могу сделать:
api.add_resource(UserView, '/user/<int:id>', methods=['GET', 'PUT', 'DELETE'])
api.add_resource(UserView, '/user', methods=['POST'])
api.add_resource(AnotherUserView, '/user', methods=['GET', 'PUT', 'DELETE'])
Но на самом деле это не сработает, так как компилятор говорит мне, что я перезаписываю функцию просмотра UserView
.
Я прочитал документ Flask-RESTful
и обнаружил, что api.add_resource
не имеет аргумента methods
, который можно использовать для указания разрешенных методов HTTP, как это делает app.route
. Есть ли способ добиться этого?