python - 将静态(对于 Django 项目)上传并使用到 AWS S3

标签 python django amazon-web-services amazon-s3

感谢您花时间阅读本文。我的问题很简单。

我能够设置collectstatic函数来将静态数据上传到AWS S3,但搞砸了一点。我一直在进行一些更改,现在我的网站没有使用正确的 url 来加载 css 文件。因此,我的初始代码将静态数据移至 S3 存储桶的“static”文件夹,并在以下网址引用它:

https://{project}.s3.amazonaws.com/static/css/bootstrap.min.css

现在,经过一些更改后,我使其引用相同的地址,但没有“静态”文件夹:

https://{project}.amazonaws.com/css/bootstrap.min.css

collectstatic 函数也会发生同样的情况。它不是将所有静态加载到“static”文件夹,而是将所有内容加载到存储桶的根目录。

这是我的设置文件:

settings.py

AWS_ACCESS_KEY_ID = config('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = config('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = config('AWS_STORAGE_BUCKET_NAME')
AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}


STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static/'), ]
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATIC_URL = "https://%s/static/" % (AWS_S3_CUSTOM_DOMAIN)

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
MEDIA_URL = 'https://%s/media/' % (AWS_S3_CUSTOM_DOMAIN)

感谢您提前提供的所有帮助!我非常感谢社区和支持。

最好, 拉苏尔·基里耶夫

最佳答案

# constants

STATICFILES_LOCATION = 'static'
STATICFILES_STORAGE = 'custom_storages.StaticStorage'

覆盖 s3boto3storage 类变量位置。

# custom_storages.py

from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage

class StaticStorage(S3Boto3Storage):
    location = settings.STATICFILES_LOCATION

您可以关注此article以供进一步引用。

关于python - 将静态(对于 Django 项目)上传并使用到 AWS S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56928418/

相关文章:

mysql - MySQL 对 amazon rds 上的大表有任何潜在的查询性能吗?

amazon-web-services - 我可以使用 cloudformation 将现有 vpc 迁移到新帐户吗?

python - 删除验证码文本中不需要的行 - opencv - python

python - Python Django-REST-framework 和 Angularjs 的文件夹结构

Django 测试 : setUpTestData on Postgres throws: "Duplicate key value violates unique constraint"

django - 如何使用 `path` 或 `re_path` 进行捕获所有路由,以便 Django 将所有不匹配的请求传递到我的索引 View ?

amazon-web-services - 如何使用预签名 URL 限制上传到 AWS S3 服务的文件的大小

python - 使用 "Scrapy"进行图像抓取没有结果

Python Regex 与第一行不匹配

django:如何仅访问 form.errors 中的第一条错误消息?