【发布时间】:2016-05-09 09:23:37
【问题描述】:
在 Django 的 forms.py 中,我有一个特定的 sn-p 代码,我在上传前清理图像。相关的sn-p是:
from PIL import Image, ImageFile
class UserProfileForm(forms.ModelForm):
avatar = forms.ImageField(label='Upload Photo')
class Meta:
model = UserProfile
exclude = ('user','previous_retort')
fields=('avatar',)
def clean_avatar(self):
image=self.cleaned_data.get("avatar")
if image:
try:
if image.size > 1000000:
#raise ValidationError("File too big")
return 0
except:
pass
image = Image.open(image)
image = MakeThumbnail(image)
return image
else:
raise 0#ValidationError("File is corrupt")
在views.py中,我有:
class UserProfileEditView(UpdateView):
model = UserProfile
form_class = UserProfileForm
template_name = "edit_profile.html"
def get_object(self, queryset=None):
return UserProfile.objects.get_or_create(user=self.request.user)[0]
def get_success_url(self):
return reverse_lazy("profile", kwargs={'slug': self.request.user})
image.size 为我崩溃,给出错误:
Exception Type: NotImplementedError
Exception Location: /home/hassan/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/core/files/storage.py in size, line 114
storage.py 中的第 114 行仅指向:
def size(self, name):
"""
Returns the total size, in bytes, of the file specified by name.
"""
raise NotImplementedError()
settings.py 中还有 DEFAULT_FILE_STORAGE = storages.backends.azure_storage.AzureStorage。
models.py 中的UserProfile 模型是:
class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True)
previous_retort = models.CharField(blank=True, max_length=500)
avatar = models.ImageField(upload_to=upload_avatar_to_location, storage=OverwriteStorage(), null=True, blank=True )
def __unicode__(self):
return u"%s's profile" % self.user
以前有人遇到过这种事情吗?如果您觉得它丢失了,请向我索取更多信息。
谢谢!
【问题讨论】:
-
settings.py中
DEFAULT_FILE_STORAGE的值是多少? -
storages.backends.azure_storage.AzureStorage
-
AzureStorage 未实现
image.size。这可能是因为您只有对 azure 服务器的间接读/写访问权限,因此获取文件大小比在本地文件系统上要昂贵得多。 -
您可以建议任何解决方法吗?
标签: python django azure azure-storage azure-blob-storage