我正在学习Flask-RESTful,并且我要执行以下任务:
有这2条GET路线
获取/学生/ ID(获取学生详细信息,通过ID搜索学生)
GET / student / id / grades(获取学生成绩,通过ID搜索学生)
如果我不想在学生GET函数中使用if语句,该如何实现呢? 我必须创建2个不同的资源吗?学生和成绩列表?
谢谢阿隆
答案 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个不同的资源,因为同一Resource类中的第二个GET将覆盖第一个。
但是,您仍然可以使用简单的Flask API而不是flask_restful。 您可能会发现此线程很有用:Using basic Flask vs Flask-RESTful for API development