【问题标题】:Multiple images linked to a user's profile链接到用户个人资料的多张图片
【发布时间】:2011-09-14 22:35:08
【问题描述】:

我有一个有个人资料照片的用户。图片将被转换为两种尺寸:一种将显示在他的个人资料中(约 200 像素宽),另一种将显示在搜索结果中的较小缩略图(约 64 像素宽)。

为此构建数据库和文件夹结构的最佳方法是什么?

我对数据库结构的两个想法是:

# 1)
class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    ...
    avatar = models.ImageField(upload_to='images/%Y/%m/%d', blank=True,)
    avatar_thumbnail = models.ImageField(upload_to='images/%Y/%m/%d', blank=True,)

# 2) 
class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    ...

class Avatar(models.Model):
    avatar = models.ImageField(upload_to='images/%Y/%m/%d')
    user = models.ForeignKey(UserProfile)

哪一个是处理这个问题的更好方法?什么是构建我的图像文件夹以轻松分离和引用两个图像大小的好方法?谢谢。

【问题讨论】:

    标签: sql database django django-models


    【解决方案1】:

    您可以使用 Sorl 缩略图,上传一张图片并使用 Sorl 的模板标签即时创建较小的版本。这也将使您不必创建另一个类。我在这个库上取得了很大的成功,希望它对你有所帮助。

    http://pypi.python.org/pypi/sorl-thumbnail/11.05.2

    【讨论】:

    • @Brandon:感谢您的回复。到目前为止,我只使用 PIL 进行图像处理,但是“动态”创建缩略图会使 Sorl 慢得多吗?例如,如果我有一个包含 50 个用户和 50 个缩略图的页面。
    • 图像只被创建一次,然后被缓存,所以第一次发生这种情况时,创建图像的处理时间会稍微长一些。老实说,在这段处理时间里,我从来没有看到过足够的延迟,甚至没有注意到。我几乎在我构建的每个 Django 网站上都实现了它。
    • @Brandon:Sorl 需要在 Django 中设置缓存吗?
    • 不,它只是在您为静态内容指定的目录中创建一个“缓存”文件夹。
    • @Brandon,在浏览安装文档时,它说“sorl-thumbnail 需要一个键值存储来进行操作。除了安装之外,您还可以在不需要特殊安装的缓存数据库和正常的 Django 设置之间进行选择像 memcached 这样的适当缓存,或者您可以设置需要更多工作的 redis。”如果不设置缓存,这将如何工作?
    【解决方案2】:

    我认为第二种选择实际上会更好。可能会完全拆分为一个单独的应用程序。我发现将功能区分开来要好得多。将与您的头像相关的所有内容保存在一个应用程序中,并保留缩略图代码等部分,以及创建用于显示头像的模板标签。

    可能已经有一个应用程序...

    【讨论】:

    • 感谢您的回复。您将如何组织这两个不同图像的文件结构?
    • 有两种思想流派。首先,您可以在图像文件夹旁边创建一个缩略图文件夹,其内部目录结构相同。我更喜欢第二种方法,即在缩略图文件旁边创建一个 thumbs 目录,并将缩略图保留在其中。类似:upload_to='images/%Y/%m/%d/thumbs/'
    • 您是否想为每个用户创建一个单独的文件夹,例如 upload_to='images/%s/%Y/%m/%d/thumbs/' %(username) ?跨度>
    • 对我来说完全有意义。老实说,我没有理由将日期放在那里。
    猜你喜欢
    • 2014-01-30
    • 2013-04-29
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 2012-01-20
    • 2012-09-06
    • 1970-01-01
    • 2015-02-10
    相关资源
    最近更新 更多