Загруженные медиафайлы не загружаются на сервер в режиме производства без перезапуска django

Мне нужно обслуживать медиа в Django в режиме производства и это очень мало нужно обслуживать фотографии пользователей Telegram в Django admin. так что я знаю все о Django это не для обслуживания файлов или медиа, так что нет необходимости повторять повторяющиеся вещи. Мне просто нужно обслуживать медиа в режиме производства для моей цели, поэтому я использую WhiteNoise для этого и добавляю эти строки:

MIDDLEWARE = [
...
    'whitenoise.middleware.WhiteNoiseMiddleware',
...
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'medias')

в urls.py:

from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('botAPI.urls')),
]

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATICFILES_DIRS[0])
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
else:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

в файле wsgi.py я разместил следующее:

...
application = get_wsgi_application()
application = WhiteNoise(application, root=MEDIA_ROOT, prefix='/media/')
....

Он работает правильно и обслуживает медиа файлы в режиме производства. но для новых медиа, например, загрузка изображения в Django admin, я должен перезапустить Django, чтобы получить доступ к этому медиа. есть ли способ решить эту проблему или другой способ в Django для обслуживания медиа файлов динамически? (Я не могу использовать какие-либо внешние услуги облако или CDN или веб-сервер) все должно работать с запущенным Django

Вероятно, вы путаете статические файлы и медиафайлы.

В Django статические файлы - это файлы, которые не изменяются во время работы приложения и отправляются в браузер при запросе, не требуя генерации сервером. Примерами являются CSS и изображения. Медиафайлы - это файлы, загружаемые пользователями в систему.

WhiteNoise используется для обслуживания статических файлов для веб-приложений на Python. Он не подходит для обслуживания загруженных пользователем "медиа" файлов, поскольку проверяет наличие статических файлов только при запуске, и поэтому файлы, добавленные после запуска приложения, не будут видны.

Вы можете использовать Cloudinary для обслуживания ваших медиафайлов в производстве. Смотрите Cloudinary на PyPi.

Вернуться на верх