Существует множество ресурсов, статей, видеоуроков на тему «Как запустить приложение Django с нуля», но ни один из них на самом деле не научит вас развертывать приложение Django в реальной рабочей среде.

Даже если они показывают часть развертывания, они устанавливают DEBUG=True, что является БОЛЬШИМ NOOOOO для производства. Серьезно, кажется, они просто создают видео ради создания видео (без обид, кстати).

Но не беспокойтесь, в этой статье я объясню не только КАК, но и ПОЧЕМУ нам нужен еще один набор архитектуры для производства при работе с медиафайлами.

Что такое медиафайлы?

Проще говоря, те статические файлы, которые загружаются пользователями сайта, называются медиафайлами. Например, посты в Instagram, видео на YouTube, эскизы изображений на Medium — все это медиафайлы.

Зачем нужен еще один режим?

Можно возразить, что зачем вообще нужно новое решение этой проблемы, ведь мы можем хранить его, как и любой другой статический файл, используемый в проекте. НЕТ! это плохая плохая плохая практика, и это единственное, чему вас никогда не научат в школах, колледжах или в случайном видео на YouTube.

Хранение файлов, загруженных пользователями, на вашем собственном сервере может быть большой проблемой как для вашего мозга, так и для вашего кошелька. Плюс проблемы с производительностью и доступностью.

Медиафайлы должны обрабатываться по-другому в производстве, мы должны использовать облачное хранилище от сторонних компаний, таких как Amazon, Google, Microsoft и т. д.

Некоторые из многих веских причин для нас эти услуги являются:

  • Облачные сервисы, такие как AWS, Azure, Google Cloud Storage, являются PRO в обработке больших гигантских кластеров данных.
  • Они создают резервные копии данных, поэтому мы можем рассчитывать на них и быть уверенными в безопасности данных наших пользователей.
  • Проще использовать API из сервиса, чем тратить время на создание собственного способа обработки файлов.

МЕДИА ФАЙЛЫ в Джанго

Вот несколько примеров лучших облачных хранилищ для производства

  • Ведро S3
  • Хранилище файлов Azure
  • Облачное хранилище Google
  • Облачность (БЕСПЛАТНО)

Я лично буду говорить о Cloudinary, потому что я хочу, чтобы все следили за мной, независимо от того, являетесь ли вы студентом колледжа с нулевым доходом или хорошо оплачиваемым инженером-программистом.

Go to settings.py

Во-первых, в INSTALLED_APPS вам нужно добавить эти две строки

INSTALLED_APPS = [
		...
    'cloudinary_storage',
    'cloudinary',
]

Во-вторых, в любом месте settings.py просто добавьте эти конфигурации

CLOUDINARY_STORAGE = {
    'CLOUD_NAME': '<your_cloud_name>',
    'API_KEY': '<your_api_key>',
    'API_SECRET': '<your_api_secret>',
}

ПРИМЕЧАНИЕ. Если вы очень наивны и не знаете, где взять API, вы можете получить эти ключи API на cloudinary.com, просто зарегистрируйтесь, НЕТ! это не спонсируется!! Я просто пытаюсь вам помочь.

Наконец, просто добавьте эти переменные в конец (или где угодно, только не вверху) settings.py

# Media settings
DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.RawMediaCloudinaryStorage'
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'

НО СЛУШАЙТЕ ВНИМАТЕЛЬНО, если вы студент, держу пари, у вас нет кредитной карты, и поэтому вы не можете создавать несколько приложений в Cloudinary с помощью одной учетной записи. Итак, вот хитрость: вместо создания MEDIA_URL = ‘/media/’ лучше использовать

MEDIA_URL = '/<your_project_name>/media/'

ПОЧЕМУ? Это сложно объяснить словами, но вы узнаете, когда создадите более одного проекта Django с одним приложением Cloudinary.

По сути, это нужно, чтобы избежать слияния двух проектов, создав отдельную папку для каждого проекта Django, поскольку вы используете одно приложение Cloudinary для двух проектов Django. Если вы не понимаете… оставьте это, оставьте последний шаг, в конце концов вы это поймете.

Некоторые другие первостепенные советы,

  • Установите DEBUG=False, в тот момент, когда вы это сделаете, вы переключитесь в рабочий режим, и локальные медиафайлы больше не будут использоваться.
  • Запустите команду python manage.py collectstatics --no-input, ЕСЛИ вы имеете дело со статическими файлами в производстве.
  • Попробуйте сжать файлы, такие как изображения или видео, на лету, ЕСЛИ это возможно, в противном случае не беспокойтесь.
  • Если вы столкнулись с ошибкой сервера (500) после любого из этих шагов, вот ответ StackOverflow, который я задавал только себе — https://stackoverflow.com/questions/69105815/django-server-error-500-when -отладка-ложь

Некоторые из этих сервисов, такие как AWS и Cloudinary, помимо этого предоставляют и другие отличные сервисы. Например, сжатие изображений, распознавание лиц, распознавание цвета темы, цензура изображений для взрослых и многие другие интересные функции. Так что есть большое да на его использование.

В настоящее время даже предпочтительнее хранить статические файлы в облаке, что необязательно, но все же считается лучшими практиками. Причина этого в том, что сервер вашего домена может быть медленным, что может занять много времени при доставке статических файлов, что в конечном итоге снизит производительность вашего сайта. Так что да, в этом вся суть.

Конечно, есть и другие причины, по всем пунктам, которые были сделаны, но вкратце это были ключевые моменты, которые нужно помнить.

Вы вообще читаете? Вау, спасибо.

Многие просто копируют код и уходят 🥲

Вы можете дать ему CLAP, если вы нашли его полезным

Я тоже был бы признателен за продолжение :)