Создание нового приложения в Django
И так, в этом уроке я создам новый модуль "system", для хранения там в будущем моделей профиля, уведомлений, а также различных полезных мне функций для всего Django проекта.
В терминале:
python manage.py startapp system
И перемещаем его в нашу папку modules.
Выглядеть должно так:
- modules
- blog
- system
Подключим наш системный модуль
backend/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mptt',
'modules.blog.apps.BlogConfig',
'modules.system.apps.SystemConfig',
]
Переименование изображений в Django при загрузке в модели ruen
Давайте создадим такую функцию.
Для этого я создам папку services с __init__.py внутри модуля "system", а внутри папки services я создам файл utils.py

А теперь приступаем к созданию функции переименования изображения
modules/system/services/utils.py
import time
from pathlib import Path
from uuid import uuid4
from django.utils.deconstruct import deconstructible
@deconstructible
class ImageDirectorySave(object):
"""
Класс загрузчика в определенную директорию
"""
def __init__(self, save_path):
self.path = save_path
def __call__(self, instance, filename):
ext = filename.split('.')[-1]
if instance and hasattr(instance, 'slug'):
filename = f'img-{instance.slug}.{ext}'
else:
filename = f'img-{uuid4().hex}.{ext}'
path = Path(self.path, time.strftime('%Y/%m/%d'), filename)
return path
Теперь его можно подключить в нашу модель Article.
Для этого нам нужно немного изменить поле thumbnail
С этого:
modules/blog/models/articles.py
thumbnail = models.ImageField(
verbose_name='Превью поста',
blank=True,
upload_to='images/thumbnails/',
validators=[FileExtensionValidator(
allowed_extensions=('png', 'jpg', 'webp', 'jpeg', 'gif'))
]
)
На следующий, обязательно импортировав нашу функцию
from modules.system.services.utils import ImageDirectorySave
thumbnail = models.ImageField(
verbose_name='Превью поста',
blank=True,
upload_to= ImageDirectorySave('images/thumbnails/'),
validators=[FileExtensionValidator(
allowed_extensions=('png', 'jpg', 'webp', 'jpeg', 'gif'))
]
)
Вот кстати что получилось из переименований:
