Как я могу получить данные из Django Headers?
У меня проблема с получением данных от Django Headers.
Мой 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 ответа
Согласно документации, говорите https://docs.djangoproject.com/en/2.0/ref/request-response/. За исключением CONTENT_LENGTH и CONTENT_TYPE, как указано выше, любой
Заголовки HTTP в запросе преобразуются в ключи META путем преобразования всех символов в верхний регистр, замены любых дефисов подчеркиванием и добавления префикса HTTP_ к имени. Так, например, заголовок с именем X-Bender будет сопоставлен с ключом META HTTP_X_BENDER.
Таким образом, вы должны иметь доступ к вашему заголовку, как это
request.META['HTTP_ABCDATA']
Если я правильно понимаю ваш вопрос.
Я считаю, что вы потребляете 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_'))
Выше приведут все заголовки.
Надеюсь это поможет.