Как я могу получить данные из Django Headers? - PullRequest
0 голосов
/ 29 мая 2018

У меня проблема с получением данных из заголовков Django.

Мой API, использующий CURL: -

curl -X POST \
  https://xyx.com \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/json' \
  -H 'xyzId: 3223' \
  -H 'abcData: ABC-123' \
  -d '{
  "name": "xyz",
  "dob": "xyz",
  "user_info": "xyz",
}'

В моем API мне нужно получить xyzId и abcData

Я пытался request.META['abcData'], но получил ошибку KeyError.

Как мне получить обе данные на мой взгляд?

Пожалуйста, помогите мне решить эту проблему.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Если я правильно понимаю ваш вопрос.

Я полагаю, вы используете API.

from urllib import request
with request.urlopen(url, data) as f:
    print(f.getcode())  # http response code
    print(f.info())     # all header info

    resp_body = f.read().decode('utf-8') # response body

Чтобы немного продвинуться в случае, если вы используете модуль requests.

Тогда вы можете сделать запрос как.

head = {}
head['Cache-Control'] = 'no-cache'
head['Content-Type'] = 'application/json'
head['xyzId'] = '3223'
head['abcData'] = 'ABC-123'
x = request.post(url='https://xyx.com',headers = head)
print x.headers

Хорошо, если вы просто хотите получить доступ к HTTP-заголовку в вашем Django View, как предложено выше.

import re
regex = re.compile('^HTTP_')
dict((regex.sub('', header), value) for (header, value) 
       in request.META.items() if header.startswith('HTTP_'))

Вышеприведенное даст вам все заголовки.

Надеюсь, это поможет.

0 голосов
/ 29 мая 2018

Согласно документации: https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.HttpRequest.META

За исключением CONTENT_LENGTH и CONTENT_TYPE, как указано выше, все HTTP-заголовки в запросе преобразуются в ключи META путем преобразования всех символов в верхний регистр и замены.любые дефисы с подчеркиванием и добавлением префикса HTTP_ к имени.Так, например, заголовок с именем X-Bender будет сопоставлен с ключом META HTTP_X_BENDER.

Так что вы должны иметь доступ к вашему заголовку, как это

request.META['HTTP_ABCDATA']
...