除了GET、PUT、POST、DELETE之外的FlaskRESTful自定义路线

2024-03-29 09:33:26 发布

您现在位置:Python中文网/ 问答频道 /正文

在flaskrestful中,我们添加了一个如下所示的api路径

api.add_resource(CuteKitty,'/api/kitty')

class CuteKitty(Resource):
    def get(self): return {}
    def post(self): return {}
    def put(self): return {}
    def delete(self): return None, 204

因此,GET /api/kitty-->;to CuteKitty.get()方法;对所有HTTP动词都是这样

假设我需要为我的api用户提供一个可爱的api

^{pr2}$

如何使用api.add_resource实现上述路由

class CuteKitty(Resource):
    def get(self): return {}
    def post(self): return {}
    def put(self): return {}
    def delete(self): return None, 204
    def drink(self,what="milk"): return {}
    def meow(self): return {}

如何添加路由,如/api/kitty/<int:kitty_id>/habits-->;CuteKitty.habits(kitty_id)


Tags: selfnoneaddapigetreturnputdef
1条回答
网友
1楼 · 发布于 2024-03-29 09:33:26

flaskrestful旨在通过解释HTTP请求方法来实现restfulapi。饮料和Meow不是标准的HTTP方法,因此flaskrestful不关心资源中的drink和{}方法。在

解决方法是定义多个API路由:

api.add_resource(CuteKitty, '/kitty/<int:kitty_id>/')
api.add_resource(DrinkingKitty, '/kitty/<int:kitty_id>/drink/<what>')
api.add_resource(MeowingKitty, '/kitty/<int:kitty_id>/meow/')

不那么直观(在我看来更糟)的方法是创建一个坦率的资源:

^{pr2}$

然后用split('/')中断参数并用它们调用task。或者,您可以将这些设置为URL参数(/endpoint/?task=drink&what=milk),这仍然是一个有效的RESTful架构。在

您也可以将Resource类的子类化并自己实现所需的功能。在这种情况下,我建议您看看Flask Classy是如何实现这一点的。或者,你可以拿起Flask Classy来玩玩它,看看你是如何喜欢它的;然而,对于一个直截了当的API,RESTful带来的不仅仅是优雅。在

相关问题 更多 >