Azure 部署上的 Django Web 应用程序

问题描述 投票:0回答:1

我正在尝试在 azure 上部署我的 Django Web 应用程序。运行良好,

debug = true
。但是在使用settings.py中的
debug  = False
部署到azure应用程序服务上后,它无法在iframe中加载用户上传的媒体文件,并提示找不到URL。我可以删除和移动媒体文件,但无法在 HTML 中使用 Iframe 进行显示。

这是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>

我尝试添加核心标头,但它不起作用。

django azure deployment django-templates azure-pipelines
1个回答
0
投票

我尝试将示例 Python Django 应用程序部署到 Azure,并在

DEBUG = False
文件中设置
settings.py

成功部署后,我的静态文件无法正常服务,如下所示。

enter image description here

Django 不在生产环境中提供静态或媒体文件。要同时提供静态文件和媒体文件,可以使用 Azure Blob 存储。如果仅提供静态文件,请使用

Whitenoise

感谢@medium关于将Django静态和媒体文件上传到Azure Blob存储的清晰解释。

我在 Azure 中创建了一个存储帐户,然后转到“配置”并启用“允许 Blob 匿名访问”,如下所示。

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'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

需求.txt:

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

AZURE_ACCOUNT_NAME
是存储帐户的名称。您可以在存储帐户的访问密钥部分找到连接字符串和帐户密钥。

enter image description here

进行上述更改后,我在部署后成功提供了静态文件和媒体文件。

Azure 输出

enter image description here

enter image description here

如果仅提供静态文件,请参阅此 Stack Overflow 线程。

© www.soinside.com 2019 - 2024. All rights reserved.