Итак, я довольно новичок в реализации flask-restplus и столкнулся с этим препятствием.
Я перечитывал документы restplus снова и снова и следовал за несколькими примерами. Но поведение, с которым я сталкиваюсь, сильно отличается от того, что должно быть.
Итак, у меня есть модель, которая должна быть списком объектов другой модели (возвращается из функции drone_model ()).
drones_list = api.model('drones_list', {
'items': fields.List(fields.Nested(drone_model())),
'message':fields.String(''),
'code': fields.Integer('')
})
Все отлично работает, ошибок нет. Но когда я пытаюсь использовать API (http://127.0.0.1:5000/datamine/v2/drones), в качестве ответа, я получаю модель Маршаллинга вместо самих данных. Если я печатаю данные, они печатаются, но по какой-то причине в Интернете модель restplus вернулся.
Ниже у меня есть код, который я написал. Если я отключу декоратор marshal_with, то данные будут возвращены очень хорошо.
@api.route('/')
class DronesList(Resource):
@api.marshal_with(drones_list, envelope='data')
@api.response(200, 'All drones successfully fetched!')
def get(self):
"""
Get all drones!.
"""
from app.utils.common import get_start_end_date_from_request
start_date, end_date = get_start_end_date_from_request(request)
drones = []
for drone in Drone.objects:
drones.append({
'id': str(drone.id),
'serial_id': drone.serial_id,
'maintenances': [],
'status': get_dynamic_status(drone, start_date, end_date),
'picture_url': drone.asset.picture_url,
'manufacturer': drone.asset.manufacturer,
'model_name': drone.asset.model_name,
'drone_type': drone.asset.drone_type,
'payload_type': drone.asset.payload_type,
'asset_url': drone.get_url(drone.id)
})
success = ClientSuccessFunctionClass('All drones successfully fetched!', 200, drones)
return (success.to_dict())
Это выходные данные в браузере:
1. Без маршального декоратора:
{
"data": {
"items": [
{
"id": "5aeafcb93a33683f73827e91",
"serial_id": "Drone 1",
"maintenances": [],
"status": "Decommissioned",
"picture_url": "some img url",
"manufacturer": "DJI",
"model_name": "Phantom 4 Pro",
"drone_type": "Quadcopter",
"payload_type": "RGB Camera",
"asset_url": "http://127.0.0.1:5000/datamine/v1/drones/5aeafcb93a33683f73827e91"
},
{
"id": "5aeaff374f85747f90df2714",
"serial_id": "Drone 2",
"maintenances": [],
"status": "Available",
"picture_url": "sime url",
"manufacturer": "DJI",
"model_name": "Phantom 4",
"drone_type": "Quadcopter",
"payload_type": "RGB Camera",
"asset_url": "http://127.0.0.1:5000/datamine/v1/drones/5aeaff374f85747f90df2714"
}
],
"message": "All drones successfully fetched!",
"code":200
}
}
2. С маршалом-декоратором:
{
"data": {
"items": [
{
"id": "Id of Drone",
"serial_id": "Name of Drone",
"status": "Status of Drone",
"maintenances": null,
"picture_url": "Picture URL",
"manufacturer": "Manufacturer of Drone",
"model_name": "Model name of Drone",
"drone_type": "Type of Drone",
"payload_type": "Payload type of Drone",
"asset_url": "Asset URL of Drone"
}
],
"message": "",
"code": ""
}
}
Было бы очень полезно, если бы кто-то мог сказать мне, что я делаю неправильно, поскольку мне нужно получить вывод, как показано в фрагменте вывода без декоратора.
Спасибо.