2 ПОЛУЧИТЬ маршруты к одному и тому же ресурсу в Flask-RESTful - PullRequest
0 голосов
/ 24 декабря 2018

Я изучаю Flask-RESTful, и у меня есть следующее задание, которое я хочу выполнить:

Есть 2 маршрута GET

GET / student / id (получить данные об ученике, найти студентапо идентификатору)
GET / ученик / id / оценки (получить оценки учеников, поиск ученика по идентификатору)

Если я не хочу иметь оператор if в функции GET ученика, как я могу это реализовать??Я должен создать 2 разных ресурса?Студент и GradesList?

Спасибо, Алон

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Да, вы должны создать 2 разных ресурса следующим образом:

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')
0 голосов
/ 18 апреля 2019

Конечно, вам нужно создать 2 разных ресурса, так как второй GET в том же классе ресурсов переопределит первый.

Однако вы все равно можете использовать простой Flask API, а не flask_restful.Вы можете найти эту ветку полезной: Использование базового Flask против Flask-RESTful для разработки API

и, что более важно, это: Flask RESTful API для нескольких и сложных конечных точек

0 голосов
/ 24 декабря 2018

Измените порядок на

/student/id/grades

/student/id

Ошибка возникает потому, что поиск маршрута происходит в том порядке, в котором вы их перечислили.

Например,скажем, у вас есть два маршрута следующим образом: /a/b и /a/ Давайте рассмотрим два случая -

Порядок 1

/ a /

/a / b /

Теперь, если вы ищете /a/<some id>, тогда он соответствует первому маршруту, и вы соответственно маршрутизируете.Опять же, когда вы ищете /a/b/<some id>, префикс т.е. /a/ снова совпадает, и вы направляетесь на первый маршрут.

Порядок 2 -

/ a/ b /

/ a /

Теперь, если вы ищете /a/<some id>, тогда он не соответствует первому маршруту (так как префикс /a/b/ не совпадает).Но второй маршрут совпадает, и вы соответственно направляетесь. В качестве альтернативы, если вы ищете /a/b/<some id>, то первый маршрут совпадает.И тогда вы будете направлены на правильный URL.

Как правило, не забывайте сначала указывать более конкретный случай.

...