📅  最后修改于: 2023-12-03 15:03:46.477000             🧑  作者: Mango
pip install django storages
:让你的 Django App 支持云存储如果你正在为 Django 开发一个 Web App,你可能需要在 App 中存储静态文件,如图片、音频和视频等。Django 直接支持使用本地文件系统储存这些文件,但如果你想使用基于云存储的解决方案(如 Amazon Web Services S3),你需要使用第三方库 django-storages
。
你可以使用 Python Package Index(PyPI)和 pip
包管理器进行安装:
pip install django-storages
要使用 django-storages
,你需要遵循以下步骤:
settings.py
文件中添加 storages
应用(INSTALLED_APPS
);MEDIA_URL
或 STATIC_URL
中添加路径前缀。以下是配置示例:
# settings.py
INSTALLED_APPS = [
# ...
'storages',
]
# Amazon S3 settings
AWS_ACCESS_KEY_ID = 'your_access_key'
AWS_SECRET_ACCESS_KEY = 'your_secret_key'
AWS_STORAGE_BUCKET_NAME = 'your_bucket_name'
# 如果你在用默认的 `AWS S3` 存储区,需要先对传递的配置进行端口处理,防止 python 解析错误
AWS_S3_CUSTOM_DOMAIN = '{}.s3.amazonaws.com'.format(AWS_STORAGE_BUCKET_NAME)
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'your_custom_folder'
# STATIC FILES SETTINGS
STATIC_URL = "https://{}/{}/".format(AWS_S3_CUSTOM_DOMAIN,AWS_LOCATION)
# Tell Django to use S3 as the default place to store static files.
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
django-storages
一旦您将 django-storages
配置到您的 Django 应用程序中,您可以通过将传递给前端的 URL 替换为 static
或 media
前缀来使用它。
STATIC_URL
和 STATICFILES_STORAGE
要将静态文件上传到云存储中,需要使用 S3 或其他云供应商的软件开发工具包(SDK)进行操作,然后将应用程序配置指向 S3 上的文件。
# settings.py
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
更改此设置将导致 Django 使用 S3Boto3Storage
类替换默认的 FileSystemStorage
。现在 Django 知道在调用 collectstatic
命令(用于将应用程序中的所有静态文件复制到 STATIC_ROOT
目录中)时,使用云存储而不是本地文件系统。您还需要指定将在哪个位置存储静态文件:
# settings.py
AWS_STORAGE_BUCKET_NAME = 'your_bucket_name'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATIC_URL = 'https://{}.s3.amazonaws.com/'.format(AWS_STORAGE_BUCKET_NAME)
由于将使用 S3Boto3Storage
存储,因此您必须将 AWS_STORAGE_BUCKET_NAME
设置为您的存储桶名称。现在,当您运行 collectstatic
命令时,所有静态文件都会上传到 AWS_STORAGE_BUCKET_NAME
。
MEDIA_URL
和 DEFAULT_FILE_STORAGE
以下是如何配置您的 Django 应用程序以使用 S3 云储存:
# settings.py
# Amazon S3 settings
AWS_ACCESS_KEY_ID = 'your_access_key'
AWS_SECRET_ACCESS_KEY = 'your_secret_key'
AWS_STORAGE_BUCKET_NAME = 'your_bucket_name'
# 如果你在用默认的 `AWS S3` 存储区,需要先对传递的配置进行端口处理,防止 python 解析错误
AWS_S3_CUSTOM_DOMAIN = '{}.s3.amazonaws.com'.format(AWS_STORAGE_BUCKET_NAME)
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_LOCATION = 'your_custom_folder' # 选填,可加可不加
# MEDIA FILES SETTINGS
MEDIA_URL = "https://{}/{}/".format(AWS_S3_CUSTOM_DOMAIN,AWS_LOCATION)
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
在这里,您将需要将媒体文件上传到 S3 上,您可以将它们看作是静态文件的访问方法。
DEFAULT_FILE_STORAGE
在这里进行定义。最后,无需再上传本地文件了。框架将自动管理文件和文件夹。这样,您就可以轻松地缩放应用程序,而不必担心到处都是模糊不清的存储库。
请注意,媒体文件上传到媒体文件夹,而不是静态文件夹。在 AWS_LOCATION
配置中,您可以使用自定义的名称指定子文件夹。
django-storages
泛行来说,是一个完整的解决方案,可让您的 Django Web 应用程序轻松扩展到云存储。尽管任何人都可以将媒体和静态文件存储在云中,但 django-storages
应该是实现此目的的最佳方法之一。
在使用云存储作为默认的存储位置时,要确保您设置了适当的私有保护,以确保敏感信息是安全的。此外,应该协议至少具有 Secure Socket Layer (SSL)和认证方法。
做好这些配置以后,你就可以愉快地开发你的云存储 Django App 了!