django.utils.datastructures.MultiValueDictKeyError Пост-запрос API REST - PullRequest
0 голосов
/ 19 мая 2018

Получение django.utils.datastructures.MultiValueDictKeyError: 'email_id' во время отправки запроса.Вот мой код

views.py:

def post(self, request):
    video_file = self.request.data['media_file']
    user_email_id = self.request.data['email_id']

    file_storage = FileSystemStorage()
    saved_file_name = file_storage.save(str(uuid.uuid4()), video_file)

upload.py:

headers = {"Authorizarion": "auth/key"}
data = {"email_id": "email@email.com",
        "media_file": open(video.file_path, "rb")}
response = requests.post("/api/url", headers=headers, data=data)

При попытке загрузить файл через Postman работает fin, так как он заботится оContent-Type, но попытка загрузки в бэкэнд затрудняет его очистку.

1 Ответ

0 голосов
/ 19 мая 2018

Кажется, вы не передаете email_id - можете ли вы напечатать его значение в upload.py перед публикацией?

Чтобы быть в безопасности, укажите значение по умолчанию в вашем views.py:

video_file = self.request.data.get("media_file", None)
user_email_id = self.request.data.get("email_id", None)

Замените None на то, что вы хотите по умолчанию, если поле отсутствует.

ОБНОВЛЕНИЕ : Конечно, вы столкнетесь спроблема загрузки содержимого файла так, как вы делаете.Чтобы загрузить фактический файл, вы должны использовать структуру files в вашем вызове requests.post(), например:

headers = {"Authorizarion": "auth/key"}
data = {"email_id": "email@email.com"}
files = {"media_file": open(video.file_path, "rb")}
response = requests.post("/api/url", headers=headers, data=data, files=files)

Затем на стороне Django вам нужно будет извлечь содержимое как:

def post(self, request):
    video_file = request.FILES.get('media_file', None)
    user_email_id = request.POST.get('email_id', None)
    # you should probably validate video_file and user_email_id here
    file_storage = FileSystemStorage()
    saved_file_name = file_storage.save(str(uuid.uui`d4()), video_file)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...