一个简单的,基于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。
需求
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 快得多,因为它做出了一些假设。
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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ef31c9ffa162716ee2cd127ce8271d1652bf77b4a62538ba695505763ae28969 |
|
MD5 | aeb1f4f8778c6e9198fa7c9c8f172710 |
|
BLAKE2b-256 | 89e9efc5b6f5b497e3633d2f7044b428ca9a7f9babb1009271055dfe58be91eb |