2到Flask-RESTful中到相同资源的GET路由

时间:2018-12-24 05:58:33

标签: python rest flask-restful

我正在学习Flask-RESTful,并且我要执行以下任务:

有这2条GET路线

获取/学生/ ID(获取学生详细信息,通过ID搜索学生)
GET / student / id / grades(获取学生成绩,通过ID搜索学生)

如果我不想在学生GET函数中使用if语句,该如何实现呢? 我必须创建2个不同的资源吗?学生和成绩列表?

谢谢阿隆

3 个答案:

答案 0 :(得分:1)

将顺序更改为

options=>{...}

发生错误是因为路由搜索是按照列出它们的顺序进行的。

例如说您有两条路线,如下所示: /student/id/grades /student/id /a/b 让我们考虑两种情况-

订单1

/ a /

/ a / b /

现在,如果您搜索/a/,则它与第一条路线匹配,因此您将被相应地路由。同样,当您搜索/a/<some id>时,前缀/a/b/<some id>会再次匹配,并且您将被路由到第一条路由。

订单2 -

/ a / b /

/ a /

现在,如果您搜索/a/,则它与第一个路由不匹配(​​因为前缀/a/<some id>不匹配)。但是第二条路线匹配,并且您也被相应路由。或者,如果搜索/a/b/,则第一条路线匹配。然后,您将被路由到正确的URL。

根据经验,请记住将更特殊的情况放在首位。

答案 1 :(得分:0)

是的,您应该创建两个不同的资源,如下所示:

from flask_restful import Api

api = Api(app)

class StudentResource(Resource):

    def get(self, id):
        // Your code here. This is an example
        student = Student.get(id)

class GradeListResource(Resource):

    def get(self, id):
        // Your code here. This is an example
        student = Student.get(id)
        grades = studen.grades()

api.add_resource(StudentResource, '/student/<int:id>', endpoint='student_resource')
api.add_resource(GradeListResource, '/student/<int:id>/grades', endpoint='grade_list_resource')

答案 2 :(得分:0)

当然,您需要创建2个不同的资源,因为同一Re​​source类中的第二个GET将覆盖第一个。

但是,您仍然可以使用简单的Flask API而不是flask_restful。 您可能会发现此线程很有用:Using basic Flask vs Flask-RESTful for API development

更重要的是,这是Flask RESTful API multiple and complex endpoints