Как добавить изображение по умолчанию в django ImageField с Amazon S3 для хранения файлов?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как добавить изображение по умолчанию в django ImageField с Amazon S3 для хранения файлов?

Сообщение Anonymous »

Я создал собственную модель пользователя, содержащую поле изображения для аватара:

Код: Выделить всё

class User(AbstractUser):
avi_pic = models.ImageField(
upload_to='avi/', default='avi/default_avi.jpg')
username = models.CharField(max_length=30, unique=True)
bio = models.CharField(max_length=150, null=True, blank=True, default='')

def __str__(self):
return self.username
Я хочу иметь avi по умолчанию для всех новых пользователей, поэтому я добавил изображение в свою корзину AWS3 и добавил путь к полю модели. Путь к этому изображению:

Код: Выделить всё

mybucket/media/avi/default_avi.png
Чтобы создать пользователя, у меня есть APIView:

Код: Выделить всё

class CreateUser(APIView):
def post(self, request):
serializer = UserRegisterSerializer(data=request.data)
if serializer.is_valid():
user = serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
и сериализатор:

Код: Выделить всё

class UserRegisterSerializer(serializers.ModelSerializer):

class Meta:
model = User
fields = ('id', 'username')

def validate_username(self, value):
if User.objects.filter(username=value).exists():
raise serializers.ValidationError("Username is already taken.")
allowed_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.'
if any(char not in allowed_characters for char in value):
raise serializers.ValidationError(
"Invalid characters in username.")
return value
Моя проблема в том, что когда я создаю новую учетную запись, пользователь не получает изображение по умолчанию. Я настроил свои настройки следующим образом:

Код: Выделить всё

STATIC_URL = 'static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = 'https://MYBUCKET.s3.amazonaws.com/media'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']
AWS_STORAGE_BUCKET_NAME = os.environ['AWS_STORAGE_BUCKET_NAME']
AWS_S3_REGION_NAME = os.environ['AWS_S3_REGION_NAME']
AWS_S3_SIGNATURE_NAME = os.environ['AWS_S3_SIGNATURE_NAME']
AWS_S3_FILE_OVERWRITE = os.environ['AWS_S3_FILE_OVERWRITE']
AWS_DEFAULT_ACL = os.environ['AWS_DEFAULT_ACL']
AWS_QUERYSTRING_AUTH = os.environ['AWS_QUERYSTRING_AUTH']
AWS_S3_VERIFY = os.environ['AWS_S3_VERIFY']
и я включил это в основной urls.py моего проекта:

Код: Выделить всё

urlpatterns += static(settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT)
Я что-то упускаю или неправильно настраиваю?

Подробнее здесь: https://stackoverflow.com/questions/791 ... le-storage
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»