相关疑难解决方法(0)

Django迁移和FileSystemStorage取决于设置

在我的Django应用程序中,我使用了FileSystemStorage生成的文件.我像这样初始化它:

import os
from urlparse import urljoin

from django.conf import settings
from django.core.files.storage import FileSystemStorage

gen_files_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'generated/'), base_url=urljoin(settings.MEDIA_URL, 'generated/'))
Run Code Online (Sandbox Code Playgroud)

当我想创建一个新文件时,我使用:

from django.core.files.base import ContentFile
from django.db import models

def next_number():
    # num = ...
    return num

gen_file = models.FileField(storage=gen_files_storage)
gen_file.save('file%s.txt' % next_number(), ContentFile(''))
Run Code Online (Sandbox Code Playgroud)

这很好.唯一的问题是FileSystemStorageDjango迁移中的路径是"硬编码".因为我使用不同的设置进行开发(更改)和生产,所以manage.py makemigrations命令通常只会因为路径发生变化而生成迁移,尽管数据库中的所有内容都保持不变.

我知道有一个使用子类的解决方案FileSystemStorage(参见下面的答案),但有更好的解决方案吗?

python django django-migrations

16
推荐指数
2
解决办法
1464
查看次数

在 django 中从私有 s3 提供静态文件

有没有办法从私有 s3.conf 提供静态文件?我知道有很多教程(例如https://simpleisbetterthancomplex.com/tutorial/2017/08/01/how-to-setup-amazon-s3-in-a-django-project.html)可以帮助您提供服务来自公共存储桶的静态文件。

我提供我的媒体文件。我得到一个签名的 url,它将在 120 秒后超时。我无法获得静态文件的类似 url 吗?

如果这听起来很愚蠢,我很抱歉。

STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'assets'),]

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

DEFAULT_FILE_STORAGE ='storages.backends.s3boto3.S3Boto3Storage'

AWS_ACCESS_KEY_ID = "***************"

AWS_SECRET_ACCESS_KEY ="**********"

AWS_STORAGE_BUCKET_NAME = "*********"

AWS_S3_REGION_NAME = 'us-east-2'

AWS_S3_SIGNATURE_VERSION = 's3v4'

AWS_DEFAULT_ACL = None

AWS_QUERYSTRING_EXPIRE = 120

AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME

AWS_LOCATION = 'static'

STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)

STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
Run Code Online (Sandbox Code Playgroud)

这是我的settings.py 和

我的媒体文件...当我查询时,我得到一个签名的网址...但是我的静态文件...我没有得到签名的网址(即它看起来像https://bucketname.s3.us-east-2 .amazonaws.com/Path/file_fileext/

所以我得到了 403 禁止

笔记:

我的存储桶 iam 用户具有 AmazonS3FullAccess 权限

我的存储桶策略是空的

我的阻止所有公共访问均已开启

这是我的 cors …

django amazon-s3 django-staticfiles

5
推荐指数
1
解决办法
4062
查看次数