Получение настраиваемого заголовка в почтовом запросе с помощью рамки 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