2015-02-05 20 views
9

sto inviando una richiesta POST al mio API da utilizzare django quadro riposo:Ottenere intestazione personalizzata su richiesta post con Django resto quadro

curl --header "X-MyHeader: 123" --data "test=test" http://127.0.0.1:8000/api/update_log/ 

Nel mio riposo vista quadro, voglio ottenere la mia intestazione costum, e se l'intestazione personalizzata soddisfa una condizione, procederò ad analizzare i miei dati post.

Ok, la mia vista si presenta come:

class PostUpdateLogView(APIView): 
throttle_classes =() 
permission_classes =() 
parser_classes = (
    parsers.FormParser, 
    parsers.MultiPartParser, 
    parsers.JSONParser, 
) 

renderer_classes = (renderers.JSONRenderer,) 

def post(self, request): 
    print request.Meta 
    # Get custom header 
    # Validate custom header 
    # Proceed to analize post data 

    # Make response 
    content = { 
     'response': 'response', 
    } 

    return Response(content) 

Sto cercando di trovare il mio header personalizzato sull'elemento request.Meta, ma quando stampo request.Meta, ottengo un errore 500. Se stampo request.data, ottengo la risposta prevista.

¿Come ottenere un'intestazione personalizzata sulla mia richiesta di post utilizzando il framework django rest?

risposta

20

Il nome dell'attributo meta-dati di richiesta è in maiuscolo:

print request.META 

L'intestazione sarà disponibile come:

request.META['HTTP_X_MYHEADER'] 

Oppure:

request.META.get('HTTP_X_MYHEADER') # return `None` if no such header 

Quote from the documentation:

Le intestazioni HTTP nella richiesta vengono convertite in chiavi META convertendo tutti i caratteri in maiuscolo, sostituendo i trattini con trattini bassi e aggiungendo un prefisso HTTP_ al nome. Ad esempio, un'intestazione denominata X-Bender verrebbe mappata alla chiave METAHTTP_X_BENDER.

+0

Mi dispiace, come un mancante (;), sono stato due ore su questo ... Forse, sai come può vedere il dettaglio del bug quando richiedo l'api utilizzando arricciatura? quando invio la richiesta di posta usando curl, posso solo vedere sulla mia console la risposta come [05/Feb/2015 08:40:39] "POST/api/update_log/HTTP/1.1" 500 78112, ma non posso guarda il dettaglio del bug Grazie e scusate la mia noncuranza. –

+1

Reindirizzare l'output di 'arricciato 'nel file e quindi aprire questo file nel browser. 'arricciare ... http://127.0.0.1:8000/api/update_log/> error.html' – catavaran

0

Se si fornisce un informazioni di intestazione valida e ottenere che le informazioni da backend quindi seguire quelli

client-name='ABCKD' 

poi si deve ottenere che le informazioni del cliente in fase di post o ottenere seguente funzione questo-

request.META['HTTP_CLIENT_NAME'] 

ti darà l'uscita 'ABCKD'.

ricordare che, qualunque sia il nome di variabile valido fornito durante l'informazioni di intestazione nella richiesta, Django convertirlo in maiuscolo e il prefisso con 'HTTP_' in qui sarà client nome convertito in CLIENT_NAME e il prefisso con HTTP_. quindi l'output finale è HTTP_CLIENT_NAME

Problemi correlati