【问题标题】:Error uploading images using Django, Google app engine使用 Django、Google 应用引擎上传图片时出错
【发布时间】:2011-12-03 17:33:58
【问题描述】:

我正在使用 Django for Google App Engine 和 djangoappengine 库构建一个网络应用程序。我一直坚持通过管理界面上传图片。我的models.py 是:

class Bio(models.Model):
    name = models.CharField(max_length=25)
    about = models.TextField()
    email = models.TextField()
    pic = models.ImageField(upload_to="img/bios/", null=True, blank=True)

当我尝试在本地和 apppot 网站的默认管理界面中上传图片时,我得到:“ImportError: No module named Image”

但是! -- 当我运行manage.py shell 时,我能够成功运行import Imagefrom PIL import Image,所以我不确定我在这里缺少什么。有什么想法吗?

【问题讨论】:

  • App Engine 不支持 PIL(使用 Python 2.5;它适用于 2.7)。 Django 的 shell 不强制执行 App Engine 沙盒限制。

标签: django google-app-engine django-admin


【解决方案1】:

http://www.allbuttonspressed.com/projects/djangoappengine#field-types 表示不支持 ImageField。

尝试上传到 blobstore(请参阅 http://code.google.com/appengine/docs/python/blobstore/overview.html)。这基本上使用了一个存储图像的干预处理程序,将 blob 键而不是文件交还给目标处理程序。

【讨论】:

  • 我该怎么做呢?我可以使用默认的管理界面,还是需要以某种方式创建自定义类?我找到了this site,它解释了如何制作自定义表单页面,但我希望能够在我的 models.py 中放入类似 BlobField 的内容(目前会出现错误)。
【解决方案2】:

Django 的 ImageField 使用 PIL 来检查上传的文件是否真的是图像。问题是,PIL 最初在 AppEngine 服务器上不可用,因此您必须改用 AppEngine 的Images API

在谷歌搜索时,我发现了 AppEngine 的 ImageField 小部件 this implementation,它使用 google.appengine.api.images 而不是 PIL。

似乎 AppEngine 现在支持 Python 2.7 上的 PIL。因此,如果您在 AppEngine 上开发 Python 2.7 应用程序,您只需要在 in app.yaml 上开启对 PIL 的支持@

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-18
    • 2015-07-14
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2014-04-20
    相关资源
    最近更新 更多