Развертывание веб-приложения Django на azure

Я пытаюсь развернуть свое веб-приложение Django на azure. Оно работает нормально с debug = true. Но после развертывания на azure app service с debug = False в settings.py, оно не может загрузить загруженные пользователем медиафайлы в iframe, говоря, что URL не найден. Я могу удалять и перемещать медиафайлы, но не могу показать их с помощью Iframe в HTML.

Это settings.py:

MEDIA_URL = '/media/'  # URL for accessing media files
MEDIA_ROOT = BASE_DIR / 'media'  # Directory where files will be uploaded to

это urls.py:

urlpatterns+= static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

это html: <iframe src="{{ MEDIA_URL }}{{ row.document.url }}" title="Document View" frameborder="0" width="100%" height="600px"></iframe>

Я пробовал добавлять заголовки ядра, но это не работает.

Я попробовал развернуть пример приложения Python Django в Azure с DEBUG = False, заданным в settings.py файле.

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

enter image description here

Django не обслуживает статические и медиафайлы в производственной среде. Для обслуживания статических и мультимедийных файлов можно использовать Azure Blob Storage. Для обслуживания только статических файлов используйте Whitenoise.

Спасибо @medium за четкое объяснение загрузки статических и медиафайлов Django в Azure Blob Storage.

Я создал учетную запись хранилища в Azure, затем перешел в раздел Configuration и включил Allow Blob anonymous access, как показано ниже.

enter image description here

Я создал два контейнера, media и static, с уровнем анонимного доступа Blob.

enter image description here

Я добавил следующие строки кода в settings.py в конце.

 STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
AZURE_ACCOUNT_NAME = "<StorageAccountName>"
AZURE_ACCOUNT_KEY = "<StorageAccountKey>"
AZURE_CONNECTION_STRING = "<ConnectionString>"
AZURE_CONTAINER_STATIC = "static"
AZURE_CONTAINER_MEDIA = "media"
STATIC_ROOT = f"https://{AZURE_ACCOUNT_NAME}.blob.core.windows.net/{AZURE_CONTAINER_STATIC}/"
MEDIA_URL = f"https://{AZURE_ACCOUNT_NAME}.blob.core.windows.net/{AZURE_CONTAINER_MEDIA}/"
STORAGES = {
    "default": {
        "BACKEND": "storages.backends.azure_storage.AzureStorage",
        "OPTIONS": {
            "azure_container": AZURE_CONTAINER_MEDIA,
            "account_name": AZURE_ACCOUNT_NAME,
            "account_key": AZURE_ACCOUNT_KEY,
            "connection_string": AZURE_CONNECTION_STRING,
        },
    },
    "staticfiles": {
        "BACKEND": "storages.backends.azure_storage.AzureStorage",
        "OPTIONS": {
            "azure_container": AZURE_CONTAINER_STATIC,
            "account_name": AZURE_ACCOUNT_NAME,
            "account_key": AZURE_ACCOUNT_KEY,
            "connection_string": AZURE_CONNECTION_STRING,
        }
    }
}
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

requirements.txt:

Django
django-storages[azure]
azure-storage-blob

AZURE_ACCOUNT_NAME - это имя учетной записи хранилища. Строку подключения и ключ учетной записи можно найти в разделе Ключи доступа к учетной записи хранилища.

enter image description here

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

Лазурный выход:

enter image description here

enter image description here

Для обслуживания только статических файлов обратитесь к этому потоку Stack Overflow.

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