2016-03-31 9 views
1

Ich erstelle derzeit die Dokumente für eine API mit Flask-Restful-Swagger. Eine meiner Ressourcen gibt ein Diktat mit einem Element zurück: ein Array. Die Elemente in dem Array haben die FormFlask-Restful-Swagger Modellklasse mit Listenfeld

{ 
    "active": bool, 
    "affectation": str, 
    "alert_type": str, ... 
} 

und so weiter. Die Felder sind bool, str, int oder float. Es gibt insgesamt 32 Felder in jedem Element des Arrays. Ich versuche, die @swagger.model Klasse als responseClass zu bauen.

Zuerst habe ich versucht:

@swagger.model 
class ReportListGet: 
    resource_fields = { 
     'items': fields.List(fields.String) 
    } 

, die die erwartete Ausgabe auf der HTML-Ansicht von Swagger hergestellt:

{ 
    "items": [ 
    "" 
    ] 
} 

Also ich oben drauf zu bauen versucht, die tatsächliche Antwort zu zeigen. Etwas wie:

{ 
    "items": [ 
    { 
     "active": fields.Boolean, 
     "affectation": fields.String, 
     "alert_type": fields.String, ... 
    } 
    ] 
} 

Mein zweiter Versuch war ein Wörterbuch mit allen Feldern zu erstellen und verwenden Sie dann fields.Nested wie:

resource_fields = { 
    'items': fields.List(fields.Nested(report_fields)) 
} 

aber die Ausgabe im HTML war

{ 
    "items": [ 
     null 
    ] 
} 

Dann habe ich versucht, mein eigenes Feld von fields.Raw zu erben, aber es gab mir die gleiche null dict auf dem HTML. Das Zuweisen von Standardwerten zu den Feldern funktionierte ebenfalls nicht.

Antwort

1

Ich habe es herausgefunden!

Die Hauptklasse wie folgt endete:

@swagger.model 
@swagger.nested(
    items=Report.__name__) 
class ReportListGet: 
    resource_fields = { 
     'items': fields.List(fields.Nested(Report.resource_fields)) 
    } 

Die andere Klasse ist nur ein gewöhnliches @swagger.model:

@swagger.model 
class Report: 
    resource_fields = { 
     "active": fields.String, 
     "affectation": fields.String, 
     "alert_type": fields.String, 
     ... 
    } 

die Hinweise gefunden ich aus Restful-Flask-Swagger's GitHub page in den Beispielen benötigt. Nützliche Code beginnt mit der Linie 157.

Nun ist die HTML-Ansicht von Swagger zeigt dies:

{ 
    "items": [ 
    { 
     "active": "", 
     "affectation": "", 
     "alert_type": "", 
     ... 
    } 
    ] 
}