2015-02-05 29 views
9

benim API bir post isteği yolluyorum post talep üzerine özel üstbilgi Alma:Django kalan çerçeve kullanılarak yapılan Django kalan çerçeve

benim dinlenme çerçeve görünümünde
curl --header "X-MyHeader: 123" --data "test=test" http://127.0.0.1:8000/api/update_log/ 

, benim kostüm başlığını almak istiyorum, ve özel başlık bir koşulu karşılarsa, posta verilerimi analiz etmeye devam edeceğim. Ben request.Meta elemanı benim özel üstbilgi bulmaya çalışıyorum

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) 

ama request.Meta yazdırırken, 500 hatası alıyorum: gibi

Tamam, benim bakış görünüyor. Request.data'yı yazdırırsam beklenen yanıtı alırım.

jan Django dinlenme çerçevesini kullanarak posta isteğimde özel bir başlık almanın yolu nedir?

cevap

20

istek meta veri özelliğinin adı büyük harf yazılır:

request.META['HTTP_X_MYHEADER'] 

Veya:

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

Quote from the documentation

print request.META 

Kişisel başlık olarak satışa sunulacak:

İstek üzerine bulunan HTTP üstbilgileri, tüm karakterleri büyük harfe dönüştürerek, alt çizgi işaretleri ile değiştirerek ve bir HTTP_ önekini adaya ekleyerek META anahtarlarına dönüştürülür. Örneğin, X-Bender adı verilen bir üstbilgi numaralı anahtarla META anahtarına eşlenecektir. Geçerli bir başlık bilgileri sağlamak ve arka uç söz konusu bilgileri alırsanız

+0

Üzgünüm, eksik bir (;) gibi, iki saat sürdüm ... Belki, curl kullanarak api istediğimde hata ayrıntılarını nasıl görebiliyorsunuz biliyor musunuz? Ben curl kullanarak yazı isteği gönderdiğimde, sadece benim konsolda görmek gibi cevap [05/Şub/2015 08:40:39] "POST/API/update_log/HTTP/1.1" 500 78112, ama yapamam hata detayına bakın. Teşekkürler ve umursamazlığımı bağışla. –

+1

'Curl'un çıktısını dosyaya yönlendirin ve sonra bu dosyayı tarayıcıda açın. curl ... http://127.0.0.1:8000/api/update_log/> error.html' – catavaran

0

o zaman bu-

request.META['HTTP_CLIENT_NAME'] 
aşağıdaki görevde o müşteri bilgi almak veya işlevi olsun sahip sonra bu

client-name='ABCKD' 

izleyin

size 'ABCKD' çıkışı verecektir.

istek daki başlık bilgilerinde sağlamak geçerli değişken adı, django burada ' HTTP_' istemci-name HTTP_ ile CLIENT_NAME ve önek dönüştürülür olacak olan o büyük ve öneki dönüştürmek ne olursa olsun, unutmayın. bu yüzden son çıktı HTTP_CLIENT_NAME

İlgili konular