2015-11-18 14 views
7

Sto provando a creare un'API REST molto semplice in Django 1.8 con Django REST Framework in Visual Studio, in cui voglio avere un singolo metodo di servizio per elaborare un JSON, ma non posso sembrano fare un post:Problemi POST API Django Rest

sto cercando di inviare questo semplice JSON tramite postino, proprio come un test:

{ 
    "foo":"bar" 
} 

con l'intestazione:

Content-Type: application/json 

Ecco il mio metodo:

@csrf_exempt 
@api_view(['POST']) 
def test(request): 
    data = request.data 
    return HttpResponse(status=200) 

Ma il mio problema è che request.data è vuoto. E se invece provo ad accedere a request.body, ottengo

Non è possibile accedere al corpo dopo aver letto dal flusso di dati della richiesta.

Qualche idea quale potrebbe essere il problema qui?

+0

Hai provato request.POST? – Gocht

+0

Sì, la stessa cosa, è un QueryDict vuoto. – tamasgobesz

risposta

0

Solo un'ipotesi: forse il problema è in Postman?

tenta di inviare POST-richiesta senza intestazioni, ma con JSON crudo (non form-data):

enter image description here

+0

Stavo facendo esattamente questo, ma con l'intestazione impostata su Content-Type: application/json. Senza l'intestazione, richiesta.POST è ancora e vuoto QueryDict, mentre request.data mi dà "Tipo di supporto non supportato" text/plain; charset = UTF-8 "in request." – tamasgobesz

1

Questo può aiutare Where's my JSON data in my incoming Django request?

Al di fuori di questo, assicurarsi che il Content type e accept-type sono impostati correttamente. Qual è la risposta grezza in Postman? La configurazione di sicurezza è corretta?

+0

Mentre provo solo a leggere il JSON e nient'altro, la risposta non elaborata restituisce la mia 200 OK, come previsto. Funziona su localhost, nulla è cambiato dal progetto predefinito, quindi non dovrebbe essere un problema di sicurezza. Il parser riconosce il mio tipo di contenuto come JSON, ma il contenuto appare come vuoto. – tamasgobesz

+0

Questo è finita semplificando, ma hai confermato che il tuo test dell'unità produce un risultato JSON valido? Cosa ti aspetti che torni? –

+0

Questo non è correlato ai test di unità, sto facendo manualmente un post tramite Postman, che produce un JSON valido. – tamasgobesz

2

Considerato un po 'questo, sembra essere un problema con Visual Studio in modalità di debug. Se provo ad accedere alla richiesta durante il debugging prima di chiamare qualsiasi funzione Python (come una semplice stampa, o passare ad una funzione per analizzarla), si presenta come un QueryDict vuoto, altrimenti si presenta bene.

0

Ho lo stesso problema quando uso POSTMAN.

risolto e il merito va a https://stackoverflow.com/a/31977373/764592

Risposta Citato:

Richiesta payload non viene convertito in formato JSON.

sto passando i miei dati nel corpo come x-www-form-urlencoded

enter image description here

È possibile risolvere il problema utilizzando Content-Type come application/x-www-form -urlencoded nell'intestazione della richiesta.

enter image description here