使用MEDIA_URL覆盖DEFAULT_FILE_STORAGE以集成Azure CDN

时间:2017-04-07 06:13:42

标签: django azure

我正在使用Azure存储帐户存储我的媒体文件

在settings.py中设置它很简单:

DEFAULT_FILE_STORAGE = 'storages.backends.azure_storage.AzureStorage'
AZURE_ACCOUNT_NAME = 'my_account_name'
AZURE_ACCOUNT_KEY = 'my_account_key'
AZURE_CONTAINER = 'my-container'

但是,我稍后考虑过要将Azure CDN用于提供媒体文件。我将如何将其指向CDN URL?我尝试在MEDIA_URL中设置它

MEDIA_ROOT = os.path.join(BASE_DIR, 'upload')
MEDIA_URL = '//my-media.azureedge.net/my-container/'

但是我的存储帐户blob显示为默认网址,即“xxxxx.blob.core.windows.net”,而不是我的媒体网址。

我如何展示MEDIA_URL而不是'xxxxx.blob.core.windows.net'?

1 个答案:

答案 0 :(得分:1)

谢天谢地,我已经有了这个问题的答案。您需要在'storages'库中覆盖Azure的存储后端类,将blob主机名替换为CDN主机名。

settings.py

MEDIA_URL = '//my-media.azureedge.net/my-container/'

storages.py

import re
from jaguar import settings
from storages.backends.azure_storage import AzureStorage


class AzureCDNURL(AzureStorage):

    def url(self, name):
        ret = super(AzureCDNURL, self).url(name)
        _ret = re.sub('//[a-z.0-9A-Z]*/', settings.MEDIA_URL, ret)
        return _ret