Gre*_*nch 5 django memcached amazon-s3 sorl-thumbnail
我有一个项目,我需要开始创建用户上传图像的动态调整大小的缩略图,之前我已经生成了一些特定大小的缩略图.我有一个现有的模型,它代表一个如下图像:
class Image(models.Model):
original = models.URLField()
small = models.URLField()
medium = models.URLField()
large = models.URLField()
Run Code Online (Sandbox Code Playgroud)
其中每个都填入了S3上相应图像的URL.在上载时,将创建所有版本(实际上不久之后,通过计划任务),存储在S3中,然后在模型上设置.展望未来,我们的设计需要为每个缩略图设置许多不同的大小,因此将它们全部存储在数据库中是不切实际的.我想original在模板中保持并动态完成剩下的工作.
所以这是我来到sorl-thumbnail的地方.它似乎打算做我想要的,但我有点迷失它应该如何工作(现在不是).作为一个测试我已经做了一个基本的视图/模板,列出了一些图像和尝试缩略图,就像教程:
{% for img in image_set %}
{% thumbnail img.original "180x180" crop="center" format="PNG" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
最终生成文件的URL cache/84/8f/848fb078f2e8d35aecd92150c6fa6843.png(如404s).我不确定我理解这个文件应该存储在哪里.我假设它正在拉入S3文件,然后在某处创建缩略图,但我不清楚它在哪里,以及我应该从哪里提供它.现在全部都在本地devserver上,使用memcached(我可以看到设置了缓存条目).PIL安装在我的环境中,支持jpeg/png.
你可能想看看Django-storage这是一个很好的AWS S3,可以解决你的问题.随之而来的还有安装boto,因为django-storage依赖于boto.
然后,您必须将以下内容添加到settings.py中
import os
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = '<YOUR BUCKET NAME>'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATIC_URL = 'http://' + AWS_STORAGE_BUCKET_NAME + '.s3.amazonaws.com/'
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
Run Code Online (Sandbox Code Playgroud)
然后,您的缓存将存储在AWS S3上.
我希望它有所帮助
注意:出于安全原因,最好将AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY添加为环境变量,而不是直接在setting.py中将其写下来.
| 归档时间: |
|
| 查看次数: |
3891 次 |
| 最近记录: |