我如何使用Django,SORL-缩略图,memcached的,和S3在一起呢?(How do I

2019-08-01 08:19发布

我有一个项目中,我要开始创建用户上传的图片,而之前我一直在产生一些具体尺寸,那些动态调整大小的缩略图。 我有一个现有的模式,这代表它看起来像这样的图片:

class Image(models.Model):
  original = models.URLField()
  small = models.URLField()
  medium = models.URLField()
  large = models.URLField()

这些的每一个与一个URL到S3的各自的图像填充。 在上传的时候,所有的版本都创建(实际上是后不久,通过计划任务),存储在S3,然后在模型中设置。 展望未来,我们的设计需要多种不同尺寸的每个缩略图,让存储他们所有的数据库是不实际的。 我想只要保持original和做即时在模板中休息。

因此,这是我来SORL-缩略图 。 这似乎是打算做我想做的,但我有种失去了以它是如何应该是工作(这不是在此刻)。 正如我已经采取了试验取得了基本视图/模板,列出了一些图片,并试图缩略图他们,很像教程:

{% 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 %}

这结束了生成的URL等的文件cache/84/8f/848fb078f2e8d35aecd92150c6fa6843.png (其404)。 我不知道我明白的地方这个文件是应该得到保存。 我假设它在S3文件拉动,然后某处创建缩略图,但我不清楚这里说的,我所在的地方应该是从服务它。 这是所有在本地devserver现在,使用memcached的(我在其中可以看到越来越缓存条目设置)。 PIL安装在我的JPEG / PNG支持环境。

Answer 1:

你可能想看看Django的存储器 ,这是一个很好的AWS S3 ,将解决这个问题的you.Along与也安装博托 ,因为Django的存储对博托依赖。

然后,你将有以下内容添加到您的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/'

那么你的缓存会被存储在AWS S3本身。

我希望它能帮助

注:出于安全原因,它是一个好主意,你的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY添加为环境变量,而不是仅仅直接写下来的setting.py。



文章来源: How do I use Django, sorl-thumbnail, memcached, and S3 together?