Отображение всех имен студентов определенных факультетов с помощью flask_restful

У меня есть данные json с именем data.py

students= [
{'name': 'Andika',
 'dept': 'FTTI',
 'gpa': 3.2,},
{'name': 'Budi',
 'dept': 'FTTI',
 'gpa': 3.7,},
{'name': 'Iman',
 'dept': 'FTTI',
 'gpa': 3.4,}
{'name': 'Mia',
 'dept': 'FES',
 'gpa': 3.9,},
{'name': 'Fajar',
 'dept': 'FES',
 'gpa': 2.9,}
]

Я пытаюсь отобразить все имена студентов определенных факультетов (кафедр) с помощью Flask_restful API. Если не найден, должен вернуть объект JSON {'student names': 'None'}, 404

А вот мой код student.py

from flask import Flask
from flask_restful import Resource, Api
from data import students

app = Flask(__name__)
api = Api(app)
class StudentDept(Resource):
    def get(self, dept):
        names=[]
        for student in students:
            names.append(student['name'])
            if student['dept']==dept:
                return {'studentnames':names}
        return {'studentnames':'None'}, 404

api.add_resource(StudentDept, '/student/name/<string:dept>')
app.run(port=5000, debug=True)

Но в результате появляется только 1 имя в https://i.stack.imgur.com/k8PY9.png

Результат должен быть таким в http://127.0.0.1:5000/student/name/FTTI < / а>

как надо правильный код?


person Riaaaa    schedule 04.06.2020    source источник


Ответы (1)


Это потому, что ваш код работает так: когда вы видите человека с нужным вам отделом: возвращайте имена (поэтому он возвращает только первое), что вам нужно сделать, это дождаться завершения цикла, а затем вернуть людей у кого есть это dept

class StudentDept(Resource):
    def get(self, dept):
        names=[]
        right_dept = []
        for student in students:
            names.append(student['name'])
            if student['dept']==dept:
                right_dept.append(student['name'])
        if len(right_dept) == 0:
            return {'studentnames':'None'}, 404
        else:
          return {'studentnames':right_dept}

Если бы вы использовали отладчик, вы бы увидели проблему, поэтому я предлагаю использовать его в следующий раз, когда вы столкнетесь с такими проблемами.

person Patch    schedule 04.06.2020