📜  pip install django storages - Shell-Bash (1)

📅  最后修改于: 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,你需要遵循以下步骤:

  1. 在 Django 的 settings.py 文件中添加 storages 应用(INSTALLED_APPS);
  2. 解析储存后端的设置(S3、Google Cloud Storage 等);
  3. MEDIA_URLSTATIC_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 替换为 staticmedia 前缀来使用它。

使用 STATIC_URLSTATICFILES_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_URLDEFAULT_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 了!