gpt4 book ai didi

django - 如何同时使用 Django、sorl-thumbnail、memcached 和 S3?

转载 作者:行者123 更新时间:2023-12-04 19:13:24 27 4
gpt4 key购买 nike

我有一个项目,我需要开始为用户上传的图像创建动态调整大小的缩略图,之前我一直在生成一些特定大小的缩略图。我有一个现有的模型,它代表一个看起来像这样的图像:

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

每一个都填充了 S3 上相应图像的 URL。在上传时,所有版本都被创建(实际上不久之后,通过计划任务),存储在 S3 中,然后在模型上设置。展望 future ,我们的设计需要每个缩略图有许多不同的大小,因此将它们全部存储在数据库中是不切实际的。我只想保留 original并在模板中即时完成其余工作。

所以这就是我来的地方 sorl-thumbnail .它似乎打算做我想做的事,但我对它应该如何工作感到有些迷茫(目前还没有)。作为测试,我制作了一个基本 View /模板,其中列出了一些图像并尝试对它们进行缩略图,很像教程:
{% 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 (其中 404s)。我不确定我是否理解这个文件应该被存储在哪里。我假设它正在拉入 S3 文件,然后在某处创建缩略图,但我不清楚它在哪里,以及我应该从哪里提供它。这一切现在都在本地开发服务器上,使用 memcached(我可以看到正在设置缓存条目)。 PIL 安装在我的环境中,支持 jpeg/png。

最佳答案

您可能想查看 Django-storages这是一个很好的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/'

然后您的缓存将存储在 AWS S3 本身上。

我希望它有帮助

注意:出于安全原因,最好将您的 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 添加为环境变量,而不是直接将它们写在 setting.py 中。

关于django - 如何同时使用 Django、sorl-thumbnail、memcached 和 S3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12838034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com