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
并且这些方法从 HttpResponseBase
的 close
方法。
我已经通读了有关 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
并且这些方法从 HttpResponseBase
的 close
方法。