Получение настраиваемого заголовка в почтовом запросе с помощью рамки django rest
Я отправляю запрос на публикацию в мой API с использованием django rest framework:
curl --header "X-MyHeader: 123" --data "test=test" http://127.0.0.1:8000/api/update_log/
В моем представлении остального фреймворка я хочу получить заголовок Costum, и если пользовательский заголовок удовлетворяет условию, я продолжу анализировать свои данные поста.
Хорошо, мой взгляд выглядит так:
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)
Я пытаюсь найти свой пользовательский заголовок для элемента request.Meta, но когда я печатаю request.Meta, я получаю ошибку 500. Если я печатаю request.data, я получаю ожидаемый ответ.
¿Каким образом можно получить пользовательский заголовок в моем почтовом запросе, используя django rest framework?
Ответы
Ответ 1
Имя атрибута метаданных запроса находится в верхнем регистре:
print request.META
Ваш заголовок будет доступен как:
request.META['HTTP_X_MYHEADER']
Или:
request.META.get('HTTP_X_MYHEADER') # return `None` if no such header
Цитата из документации:
Заголовки HTTP в запросе преобразуются в клавиши META
, преобразуя все символы в верхний регистр, заменяя любые дефисы символами подчеркивания и добавляя префикс HTTP_
к имени. Так, например, заголовок с именем X-Bender
будет сопоставлен с ключом META
HTTP_X_BENDER
.
Ответ 2
Если вы предоставляете правильную информацию заголовка и получаете эту информацию из бэкэнд, следуйте этим
client-name='ABCKD'
то вы получите информацию о клиенте в сообщении или получите функцию после этого -
request.META['HTTP_CLIENT_NAME']
он даст вам выход "ABCKD".
помните, что независимо от имени допустимой переменной, которое вы указываете в своей информации заголовка в запросе, django конвертирует его в верхний регистр и префикс с помощью "HTTP_
",
здесь здесь клиентское имя преобразуется в CLIENT_NAME
и префикс HTTP_
.
поэтому конечный результат: HTTP_CLIENT_NAME