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. Они все пустые/дают ошибку.