Django request.POST пуст

Я использую django, allauth и dj-rest-auth. Я реализую apple sign in. Есть проблема с apple, что мне нужно настроить несколько client_id, потому что вам нужно разное для ios и android/web. Проблема обсуждается здесь: https://github.com/pennersr/django-allauth/issues/2718. А также некоторые решения.

В любом случае, мой вопрос не связан с этой проблемой. Я пытаюсь реализовать решение, но django не работает так, как я ожидаю. Проблема в том, что я не могу получить доступ к данным request.POST. Что, как мне кажется, должно быть возможно

# We add client_id when we make the post request, and we use it to filter for it
def list_apps(self, request, provider=None, client_id=None):
    print(request.POST)     --> returns empty dict
    # print(request.body)   --> error
    # print(request.data)   --> error
    assert False
    print(request.POST.get('client_id'))
    apps = super().list_apps(request=request, provider=provider, client_id=client_id)
    return apps

request.body выдает ошибку: django.http.request.RawPostDataException: You cannot access body after reading from request's data stream

request.data выдает ошибку: AttributeError: 'WSGIRequest' object has no attribute 'data'

Я ожидаю, что смогу получить доступ хотя бы к одному из request.body, request.data или request.POST. Иначе как я могу получить доступ к размещенным данным?

У меня есть идея, почему это может произойти, но я не уверен.

Функция validate вызывается в SocialLoginSerializer. Эта функция в конечном итоге вызывает list_app из DefaultSocialAccountAdapter. Именно эту функцию я переписал выше.

Подозреваю, что request.POST заполняется только после выполнения функции сериализатора. Поэтому если вы затем проверите request.POST, request.body или request.data внутри функции validate. Они все пустые/дают ошибку.

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