KeyError: 'pick-number' при доступе к пользовательским заголовкам в представлении Django Rest Framework [duplicate]

Я работаю над API Django Rest Framework и столкнулся с KeyError при попытке получить доступ к пользовательским заголовкам в моем представлении. Ошибка возникает, когда я пытаюсь получить доступ к заголовку "pick_number" в моем confirmingPick1View. Отслеживание выглядит следующим образом:

Internal Server Error: /api/wager/pick1/confirm/
Traceback (most recent call last):
  File "/home/gutsthakur/Projects/Betting App/.env/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/gutsthakur/Projects/Betting App/.env/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/gutsthakur/Projects/Betting App/.env/lib/python3.10/site-packages/django/views/decorators/csrf.py", line 65, in _view_wrapper
    return view_func(request, *args, **kwargs)
  File "/home/gutsthakur/Projects/Betting App/.env/lib/python3.10/site-packages/django/views/generic/base.py", line 104, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/gutsthakur/Projects/Betting App/.env/lib/python3.10/site-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "/home/gutsthakur/Projects/Betting App/.env/lib/python3.10/site-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/gutsthakur/Projects/Betting App/.env/lib/python3.10/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/home/gutsthakur/Projects/Betting App/.env/lib/python3.10/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/gutsthakur/Projects/Betting App/wager/views.py", line 76, in post
    "pick_number": request.headers["pick_number"],
  File "/home/gutsthakur/Projects/Betting App/.env/lib/python3.10/site-packages/django/http/request.py", line 448, in __getitem__
    return super().__getitem__(key.replace("_", "-"))
  File "/home/gutsthakur/Projects/Betting App/.env/lib/python3.10/site-packages/django/utils/datastructures.py", line 308, in __getitem__
    return self._store[key.lower()][1]
KeyError: 'pick-number'

В моем представлении я пытаюсь получить доступ к пользовательским заголовкам "Draw", "pick_number" и "bet_amount" для обработки ставки пользователя. Я ожидал, что доступ к этим заголовкам будет осуществляться напрямую без каких-либо проблем, но вместо этого я получаю KeyError для "pick_number", доступ к которому осуществляется как к 'pick-number'. Вот код views.py:

class confirmingPick1View(generics.GenericAPIView):
    serializer_class = confirmingPick1Serializer
    permission_classes = [permissions.IsAuthenticated]
    authentication_classes = [JWTAuthentication]

    @swagger_auto_schema(
        manual_parameters=[
            openapi.Parameter(
                "Draw",
                openapi.IN_HEADER,
                description="Draw id",
                type=openapi.TYPE_STRING,
            ),
            openapi.Parameter(
                "pick_number",
                openapi.IN_HEADER,
                description="Pick Number",
                type=openapi.TYPE_NUMBER,
            ),
            openapi.Parameter(
                "bet_amount",
                openapi.IN_HEADER,
                description="Bet Amount",
                type=openapi.TYPE_INTEGER,
            ),
        ]
    )
    def post(self, request):
        data = request.data
        serializer = self.get_serializer(
            data=data,
            context={
                "user": request.user.id,
                "draw_id": request.headers["Draw"],
                "pick_number": request.headers["pick_number"],
                "bet_amount": request.headers["bet_amount"],
            },
        )
        serializer.is_valid(raise_exception=True)
        try:
            serializer.save()
            return Response(
                {"message": "Bet confirmed successfully."},
                status=status.HTTP_200_OK,
            )
        except serializers.ValidationError as e:
            return Response(
                {"error": str(e)},
                status=status.HTTP_400_BAD_REQUEST,
            )

и команда curl, которую я использовал для тестирования API:

curl -X 'POST' \
  'http://127.0.0.1:8000/api/wager/pick1/confirm/' \
  -H 'accept: application/json' \
  -H 'Draw: <UUID of the draw>' \
  -H 'pick_number: 12' \
  -H 'bet_amount: 100' \
  -H 'Authorization: Bearer <your_token_here>' \
  -H 'Content-Type: application/json' \
  -H 'X-CSRFToken: <your_token_here>' \
  -d '{
  "is_confirmed": true
}'

Я не уверен, почему к заголовку pick_number обращаются как к 'pick-number'. Посоветуйте, как правильно обращаться к пользовательским заголовкам или что может быть причиной этой проблемы?

Вернуться на верх