跳转到主要内容

一个简单的,基于S3的缩略图生成器字段。

项目描述

django-athumb

作者::

Greg Taylor

许可协议::

BSD

在Django中存储图像及其缩略图在S3上可能有些笨拙。虽然这个Django应用程序可能与更多的典型存储后端一起工作,但其目的是接受图像上传,生成缩略图,并将原始图像以及缩略图上传到S3。然后您可以通过在模板中执行类似以下操作来获取缩略图

<img src="{% thumbnail some_obj.image '80x80' %}" />

这会自动组装远程S3 URL以检索缩略图。不执行错误检查,并为了速度做出了一些假设。

django-athumb的优点

django-athumb的主要优点是,与sorl和其他软件不同,缩略图是在用户上传原始图像时生成的。我们不是按需生成缩略图,也不需要缓存层,我们在上传时生成预定义的缩略图。这带来了一些重大好处

  • 在第一次保存/上传之后,我们 never 检查文件的存在。我们假设它存在,跳过需要命中缓存或磁盘的需要。这使得我们比其他一些替代方案更快、更简单。

  • 由于我们在models.py中预先定义了每个可能的缩略图,所以我们有一个定义的值集。缩略图大小也可以命名为任何东西,无论是“60x60_cropped”还是“medium_nocrop”。

django-athumb的缺点

如果不考虑以下这些,这将不是一个公正的评价

  • 有些人可能更喜欢在模板中定义缩略图大小。这主要是个人的偏好。

  • 我们只支持简单的缩放/裁剪/居中作为缩略图操作。sorl和其他软件将为您提供许多开箱即用的功能。

许可协议

所有代码都采用BSD风格的许可协议,有关详情请参阅LICENSE。

来源:http://github.com/duointeractive/django-athumb

需求

  • python >= 2.7

  • django >= 1.6

  • boto >= 3.0

  • Pillow >= 2.5.0

安装

要安装,请运行

pip install django-athumb

或者

easy_install django-athumb

配置

settings.py

添加到 INSTALLED_APPS

'athumb'

settings.py 中添加到 TEMPLATE_CONTEXT_PROCESSORS

'django.core.context_processors.request'

如果您想将S3存储作为默认文件后端

# If you don't want this to be the global default, just make sure you
# specify the S3BotoStorage_AllPublic backend on a per-field basis.
DEFAULT_FILE_STORAGE = 'athumb.backends.s3boto.S3BotoStorage_AllPublic'

然后设置后端使用的某些值

AWS_ACCESS_KEY_ID = 'YourS3AccessKeyHere'
AWS_SECRET_ACCESS_KEY = 'YourS3SecretAccessKeyHere'
AWS_STORAGE_BUCKET_NAME = 'OneOfYourBuckets'

如果您想使用 vanity domain 而不是 s3.amazonaws.com,您首先应该在亚马逊中配置它,然后将其添加到设置中

AWS_STORAGE_BUCKET_CNAME = 'static.yourdomain.com'

如果您想在缩略图上使用缓存破坏器(在图像URL末尾添加的字符串,导致浏览器在更改后重新获取图像),可以设置一个类似这样的值

MEDIA_CACHE_BUSTER = 'SomeValue'

您不需要指定缓存破坏器。

如果您不使用默认的S3区域,可以使用以下设置定义它

AWS_REGION = 'us-east-1'

在模型中使用

在配置了上述所有内容之后,您就可以开始在模型中使用 athumb 了。这里是一个具有缩略图字段的示例模型。

from django.db import models
from athumb.fields import ImageWithThumbsField
from athumb.backends.s3boto import S3BotoStorage_AllPublic

# It is generally good to keep these stored in their own module, to allow
# for other models.py modules to import the values. This assumes that more
# than one model stores stuff in the same bucket.
PUBLIC_MEDIA_BUCKET = S3BotoStorage_AllPublic(bucket='public-media')

class YourModel(models.Model)
    image = ImageWithThumbsField(
        upload_to="store/product_images",
        thumbs=(
            ('50x50_cropped', {'size': (50, 50), 'crop': True}),
            ('60x60', {'size': (60, 60)}),
            ('80x1000', {'size': (80, 1000)}),
            ('front_page', {'size': (120, 1000)}),
            ('medium', {'size': (161, 1000)}),
            ('large', {'size': (200, 1000)}),
        ),
        blank=True, null=True,
        storage=PUBLIC_MEDIA_BUCKET)

需要注意的几点

  • thumbs 中的元组格式为 (name, options)name 的值可以是任何字符串。注意,您可以使名称为尺寸,或者完全不同。

  • storage 关键字很重要,用于指定字段的存储桶。如果您没有指定 storage,则使用默认后端。作为一个快捷方式,您可以设置 S3BotoStorage_AllPublic 作为默认后端,而 AWS_* 值将确定默认存储桶。

后端

django-athumb 随附一个简化的 s3boto 后端,该后端是从 django-storages 项目中找到的。对于大多数情况,您将想要使用 athumb.backends.s3boto.S3BotoStorage_AllPublic,因为它不使用 HTTPS,并且比 S3BotoStorage 快得多,因为它做出了一些假设。

模板标签

当在 HTML 模板中引用媒体时,您可以使用自定义模板标签。这些标签可以通过加载 athumb 模板标签集合来访问。

{% load thumbnail %}

如果您想使 athumb 标签全局,可以在您的 master urls.py 文件中添加以下内容

from django.template import add_to_builtins add_to_builtins('athumb.templatetags.thumbnail')

某些后端(S3)支持当请求页面是安全的时候 https URL。为了检测 https,请求必须通过键 'request' 放入模板上下文中。这可以通过在 settings.py 中的 TEMPLATE_CONTEXT_PROCESSORS 中添加 'django.core.context_processors.request' 来自动完成。

thumbnail

返回指定缩略图大小的 URL(根据对象 models.py 模型类的说明)

{% thumbnail some_obj.image '50x50_cropped' %}

或者,将值保存在模板上下文变量中

{% thumbnail some_obj.image 'front_page' as 'some_var' %}

只要您有 Django 的请求上下文处理器,缩略图标签将检测当前视图是否通过 SSL 提供,并自动将缩略图 URL 中的任何 http 转换为 https。如果您想始终强制缩略图使用 SSL,将其作为参数添加,如下所示

{% thumbnail some_obj.image '60x60' force_ssl=True %}

要将缩略图 URL 放入上下文中而不是仅渲染它,请使用 as [context_var_name] 结束标签

{% thumbnail image '60x60' as 'thumb' %}
<img src="{{ thumb }}" />

manage.py 命令

athumb_regen_field

# ./manage.py athumb_regen_field <app.model> <field>

重新生成给定模型的所有实例的指定字段的缩略图。

待办事项

  • 查看问题跟踪器以获取需要完成的事项列表。

变更日志

2.4.1

  • 修复以恢复与迁移的兼容性。(jneves)

2.4

  • 更改以添加 Django 1.7 兼容性。

2.3

  • 嵌入 pial,无需单独安装。

2.2

  • 通过 AWS_REGION 设置支持不同的 S3 区域。

  • 改进了错误处理。

2.1

  • 使 MEDIA_CACHE_BUSTER 可选。

  • 记录了 MEDIA_CACHE_BUSTER。

2.0

  • 对 models.py 中指定缩略图的方式进行了全面重写。

  • 移除了基于属性的图像字段大小检索,因为我们不再仅限于维度。

  • 其他一些改进。

1.0

  • 初始版本。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

django-athumb-2.4.1.tar.gz (21.5 kB 查看哈希值)

上传时间

由以下支持