当前位置:  开发笔记 > 编程语言 > 正文

Django:在内存中打开上传的文件; 在Form Clean方法中?

如何解决《Django:在内存中打开上传的文件;在FormClean方法中?》经验,为你挑选了1个好方法。

我需要在Form clean方法中验证上传的XML文件的内容,但是我无法打开该文件进行验证.它接缝,在clean方法中,文件尚未从内存(或临时目录)移动到目标目录.

例如,以下代码不起作用,因为该文件尚未移动到该目标.它仍然在内存(或临时目录)中:

xml_file = cleaned_data.get('xml_file')
xml_file_absolute = '%(1)s%(2)s' % {'1': settings.MEDIA_ROOT, '2': xml_file}
xml_size = str(os.path.getsize(xml_file_absolute))

当我查看"cleaning_data"变量时,它会显示:

{'xml_file': }

cleaned_data.get('xml_file') 只返回"texting.nzb"作为字符串.

是否有另一种方法来访问内存(或临时目录)中的文件?


同样,这是我的Form的clean方法,它绑定到默认的管理视图.我一次又一次地被告知所有验证都应该在表单中处理,而不是视图.正确?



1> Jarret Hardi..:

我假设你已经使用以下方法将表单绑定到文件:

my_form = MyFormClass(request.POST, request.FILES)

如果您已经验证了表单,则可以使用request.FILES字典访问文件内容:

if my_form.is_valid():
    data = request.FILES['myfile'].read()

request.FILES ['myfile']对象是一个UploadedFile对象,因此它支持类似文件的读/写操作.

如果您需要从表单的clean方法(或清理机制的任何方法)中访问文件内容,那么您正在做正确的事情.cleaned_data.get('xml_file')返回一个UploadedFile对象.该__str__对象的方法只打印出字符串,这就是为什么你只看到文件名.但是,您可以访问整个内容:

xml_file = myform.cleaned_data.get('xml_file')
print xml_file.read()

这部分文档有一些很好的例子:http://docs.djangoproject.com/en/dev/topics/http/file-uploads/

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有