【问题标题】:Django rest Framework django.utils.datastructures.MultiValueDictKeyError: 'files'Django 休息框架 django.utils.datastructures.MultiValueDictKeyError: 'files'
【发布时间】:2021-12-21 14:39:54
【问题描述】:

我正在尝试使用 api 上传图像,但显示此错误。 谁能告诉我是什么问题。

Method Not Allowed: /scanner/batch-upload/
[09/Nov/2021 00:44:03] "GET /scanner/batch-upload/ HTTP/1.1" 405 8763
Internal Server Error: /scanner/batch-upload/
Traceback (most recent call last):
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/venv/lib/python3.9/site-packages/django/utils/datastructures.py", line 78, in __getitem__
    list_ = super().__getitem__(key)
KeyError: 'files'

在处理上述异常的过程中,又发生了一个异常:

Traceback (most recent call last):
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/venv/lib/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/venv/lib/python3.9/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/venv/lib/python3.9/site-packages/rest_framework/views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/venv/lib/python3.9/site-packages/rest_framework/views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/venv/lib/python3.9/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
    raise exc
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/venv/lib/python3.9/site-packages/rest_framework/views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/venv/lib/python3.9/site-packages/rest_framework/generics.py", line 190, in post
    return self.create(request, *args, **kwargs)
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/accounts/views.py", line 336, in create
    file_path = request.FILES['files'].read()
  File "/home/kali/Desktop/py_speedy_scanner_img2pdf/venv/lib/python3.9/site-packages/django/utils/datastructures.py", line 80, in __getitem__
    raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'files'
[09/Nov/2021 00:44:07] "POST /scanner/batch-upload/ HTTP/1.1" 500 110792

【问题讨论】:

    标签: python-3.x rest file-upload django-rest-framework


    【解决方案1】:

    我认为这是因为在 request.Post 中找不到文件密钥。

    Python 字典有一个集成的静态方法 .get() 。当 .get() 找不到键时,它返回默认的 None 值或您指定的值。

    我建议使用 .get() 。这是一个例子。

    更改程序的设置

    request.POST[""]
    

    request.POST.get("", "default value")
    

    另外,不需要在每个输入字段之前写{% csrf_token %}。对于每种形式,只需要一个 csrf_token。因此,您可以删除其他人,只需将一个存储在表单标签内即可。

    【讨论】:

      猜你喜欢
      • 2013-04-08
      • 2021-11-26
      • 1970-01-01
      • 2015-02-25
      • 2016-04-25
      • 2016-03-23
      • 2016-06-20
      相关资源
      最近更新 更多