Flask-RESTful 指定特定端点允许的 HTTP 方法
Flask-RESTful specify HTTP methods allowed for specific endpoints
考虑到我有两个 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')
鉴于上面的代码,UserView
的 GET
、PUT
和 DELETE
方法都需要一个路径参数 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
的参数可以像 app.route
那样用于指定允许的 HTTP 方法.有办法实现吗?
在 Flask-Restful 中,class 函数 get
、post
等对应于 http 方法。如果您不想要资源的特定方法,只需将其保留即可。
我个人认为 class 中没有 id
的 POST 方法不会造成混淆。
要获得预期的结果,请考虑为每个资源添加所需的路线。例如
from flask_restful import Api, Resource
class User(Resource):
def get(self, id=None):
if id:
return "specific user"
else:
return "list of users"
def post(self):
return "post with no id!"
def delete(self, id=None):
if id:
return "deleting user"
else:
return "need to specify a user"
api.add_resource(User, '/user', '/user/<int:id>')
考虑到我有两个 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')
鉴于上面的代码,UserView
的 GET
、PUT
和 DELETE
方法都需要一个路径参数 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
的参数可以像 app.route
那样用于指定允许的 HTTP 方法.有办法实现吗?
在 Flask-Restful 中,class 函数 get
、post
等对应于 http 方法。如果您不想要资源的特定方法,只需将其保留即可。
我个人认为 class 中没有 id
的 POST 方法不会造成混淆。
要获得预期的结果,请考虑为每个资源添加所需的路线。例如
from flask_restful import Api, Resource
class User(Resource):
def get(self, id=None):
if id:
return "specific user"
else:
return "list of users"
def post(self):
return "post with no id!"
def delete(self, id=None):
if id:
return "deleting user"
else:
return "need to specify a user"
api.add_resource(User, '/user', '/user/<int:id>')