我试图为我的Django应用程序制作March 17, 2015,透明地记录所有已保存文件的哈希值。
我的测试存储类非常简单:
from django.core.files.storage import Storage
from django.db.models.fields.files import FieldFile
from utils import get_text_hash
class MyStorage(Storage)
def _save(self, name, content):
if isinstance(content, FieldFile):
raw_content = content.open().read()
else:
raw_content = content
assert isinstance(raw_content, basestring)
print(get_text_hash(raw_content))
return super(MyStorage, self)._save(name, content)
然而,当我尝试在我的应用程序中保存文件时,我收到错误:
'NoneType' object has no attribute 'read'
回溯结束于该行:
raw_content = content.open().read()
为什么open()
返回None而不是文件句柄?在Django存储类中访问原始文件内容的正确方法是什么?
答案 0 :(得分:0)
raw_content = content.open().read()
更改为
raw_content = content.read()
我认为您可以查看这些手册。
_save(name,content)¶由Storage.save()调用。该名称已经通过get_valid_name()和get_available_name()以及 content将是一个File对象本身。
所以内容是File对象。
打开或重新打开与此实例关联的文件 指定模式。与标准的Python open()方法不同,它没有 返回文件描述符。