Ошибка при загрузке файлов в хранилище Azure Blob через Django App

Мне нужно создать файловый менеджер для загрузки изображений из приложения Django в хранилище Azure blob. Однако, когда я пытаюсь загрузить файл в хранилище Azure, я получаю следующую ошибку:

Это мой azure_controller.py:

from io import BytesIO
import uuid
from pathlib import Path

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient
from azure.storage.blob import BlobClient
from django.conf import settings

from . import models

ALLOWED_EXTENSIONS = ['.png', '.jpg']

def create_blob_client(file_name):
    default_credential = DefaultAzureCredential()
    secret_client=SecretClient(
        vault_url = settings.AZURE_VAULT_ACCOUNT,
        credential = default_credential
    )
    storage_credentials = secret_client.get_secret(name=settings.AZURE_STORAGE_KEY_NAME)

    return BlobClient(
        account_url = settings.AZURE_STORAGE_ACCOUNT,
        container_name = settings.AZURE_APP_BLOB_NAME,
        blob_name = file_name,
        credential = storage_credentials.value,
    )

def check_file_ext(path):
    ext = Path(path).suffix
    return ext in ALLOWED_EXTENSIONS


def download_blob(file):
    blob_client=create_blob_client(file)
    if not blob_client.exists():
        return
    blob_content = blob_client.download_blob()
    return blob_content


def save_file_url_to_db(file_url):
    new_file = models.File.objects.create(file_url = file_url)
    new_file.save()
    return new_file


def upload_file_to_blob(file):
    if not check_file_ext(file.name):
        return

    file_prefix = uuid.uuid4().hex
    ext=Path(file.name).suffix
    file_name = f"{file_prefix}{ext}"
    file_content = file.read()
    file_io = BytesIO(file_content)
    blob_client =create_blob_client(file_name = file_name)
    blob_client.upload_blob(data=file_io)
    file_object=save_file_url_to_db(blob_client.url)

    return file_object

Это мой settings.py:

Django settings for website project.

from pathlib import Path
import environ


BASE_DIR = Path(__file__).resolve().parent.parent


env = environ.Env()

environ.Env.read_env() 
 
AZURE_STORAGE_ACCOUNT=env.str('AZURE_STORAGE_ACCOUNT')
AZURE_VAULT_ACCOUNT=env.str('AZURE_VAULT_ACCOUNT')
AZURE_STORAGE_KEY_NAME=env.str('AZURE_STORAGE_KEY_NAME')
AZURE_APP_BLOB_NAME=env.str('AZURE_APP_BLOB_NAME')


SECRET_KEY = env('MY_SECRET')

DEBUG = True

ALLOWED_HOSTS = []



INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'files',
    'django_extensions',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'website.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'website.wsgi.application'



DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


# Password validation


AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)


STATIC_URL = 'static/'

# Default primary key field type


DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

В некоторых документах, которые я читал, рекомендуется использовать Security Prncipal в Azure, что подразумевает настройку Azure AD, но каждый раз, когда я пытаюсь зайти в Azure AD в своей учетной записи, я получаю сообщение о том, что мне не разрешено (я являюсь владельцем учетной записи). Честно говоря, я понятия не имею, куда двигаться дальше и как начать исправлять ситуацию. Может ли кто-нибудь помочь?

Любая помощь будет высоко оценена

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