2015-09-24 12 views
6

Sto usando Flask Restful per la mia API server e sto postando sul server un dizionario dove uno dei valori è una lista di dizionari.Flask Restful accetta una lista in una richiesta post

parser.add_argument('products_in_basket', type=list) 
def post(self, user_id): 
    args = parser.parse_args() 
    print request.data 
    print args['my_list'] 

Il problema che ho è args [ 'my_list'] è solo restituendo il primo elemento della lista. Considerando che posso vedere tutte le liste da request.data.

Questo è request.data

{"address_id":1,"my_list":[{"size":12,"colour":"red","id":34219,"quantity":1},{"size":10,"colour":"red","id":12219,"quantity":2},{"size":8,"colour":"red","id":5214,"quantity":3}],"payment_card_id":1} 

Questo è args [ 'my_list']

[u'colour', u'quantity', u'id', u'size'] 

Dove sto andando male?

+1

così prenderlo da request.data invece – Dan

+0

Quello è un po 'hacky –

risposta

7

Quali sono le opzioni del parser add_argument? products_in_basket è una chiave effettiva per i dati richiesti? O stai cercando di fornire un nome arbitrario e/o rinominare il dict?

Dai uno sguardo allo Multiple Values & Lists dal Documentazione richiesta di analisi.

Si consiglia di fare una cosa del genere, invece ...

parser = reqparse.RequestParser() 
parser.add_argument('my_list', action='append') 
+0

Grazie, action = 'append' era la soluzione :) –

1

provare ad accedere ai dati in questo modo:

for product in args.my_list: 
     size = product.get('size') 
     etc.... 

Questo vi permetterà di iterare su tutte le dict oggetti nella lista my_list.