Развертывание веб-приложения 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
файле.
После успешного развертывания мои статические файлы не обслуживаются должным образом, как показано ниже.
Django не обслуживает статические и медиафайлы в производственной среде. Для обслуживания статических и мультимедийных файлов можно использовать Azure Blob Storage. Для обслуживания только статических файлов используйте Whitenoise
.
Спасибо @medium за четкое объяснение загрузки статических и медиафайлов Django в Azure Blob Storage.
Я создал учетную запись хранилища в Azure, затем перешел в раздел Configuration и включил Allow Blob anonymous access, как показано ниже.
Я создал два контейнера, media
и static
, с уровнем анонимного доступа Blob.
Я добавил следующие строки кода в 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
- это имя учетной записи хранилища. Строку подключения и ключ учетной записи можно найти в разделе Ключи доступа к учетной записи хранилища.
После внесения вышеуказанных изменений я успешно обслужил статические и медиафайлы после развертывания.
Лазурный выход:
Для обслуживания только статических файлов обратитесь к этому потоку Stack Overflow.