Django 是否关闭并删除 TemporaryUploadedFiles 和 InMemoryUploadedFiles?

Does Django close and delete TemporaryUploadedFiles and InMemoryUploadedFiles?

我已经通读了有关 TemporaryUploadedFiles 和 InMemoryUploadedFiles 的所有 documentation,但他们从不谈论清理。我知道 Python 临时文件需要关闭才能自动删除。

@api_view(['POST', ])
def test(request):
    #img is type InMemoryUploadedFile
    for img in request.FILES.getlist('images'):
        Model.objects.image = img
        Model.save()

    #vid is type TemporaryUploadedFile
    for vid in request.FILES.getlist('videos'):
        Model.objects.video = vid
        Model.save()

上面的代码中,TemporaryUploadedFiles和InMemoryUploadedFiles是否自动删除清理了?

这些文件是关闭的,WSGI handler可以提供一个方法叫做close,那个方法叫做post-请求的处​​理。

Django 源代码 (http/request.py)

class HttpRequest:
  ...
  def close(self):
     if hasattr(self, '_files'):
        for f in chain.from_iterable(list_[1] for list_ in self._files.lists()):
           f.close()

编辑:

Django全局配置了两种文件上传器InMemory和Temp file。所有这些 类 实现了 close 方法, request 对象的关闭方法被注册为 _resource_closers 并且这些方法从 HttpResponseBaseclose方法。