Usar el SDK de almacenamiento de Azure con Django (y eliminar la dependencia de los almacenamientos de django por completo)

¿Alguien tiene alguna sugerencia sobre el uso de Azure-storage directamente con Django? Lo pregunto porque actualmente estoy intentando configurar Azure Cloud Storage para mi aplicación Django (alojada en Azure VM con sistema operativo Ubuntu), y django-storages no parecen estar interactuando correctamente con el SDK de almacenamiento de Azure (problema conocido: consulte aquí ). La solución que aparece allí no funcionará para mí dado que mi versión de Django es <1.6.2.

Por lo tanto, necesitaré usar Azure-storage directamente con Django. ¿Alguien ha establecido eso antes? Necesito guardar imágenes y archivos mp3 en el almacenamiento en la nube.


Actualmente, en mi models.py, tengo:

 def upload_to_location(instance, filename): try: blocks = filename.split('.') ext = blocks[-1] filename = "%s.%s" % (uuid.uuid4(), ext) instance.title = blocks[0] return os.path.join('uploads/', filename) except Exception as e: print '%s (%s)' % (e.message, type(e)) return 0 class Photo(models.Model): description = models.TextField(validators=[MaxLengthValidator(500)]) submitted_on = models.DateTimeField(auto_now_add=True) image_file = models.ImageField(upload_to=upload_to_location, null=True, blank=True ) 

Y luego django-storages y boto se encargan del rest. Sin embargo, cuando conecto django-storages con Azure Cloud Storage, obtengo el siguiente error:

 Exception Value: 'module' object has no attribute 'WindowsAzureMissingResourceError' Exception Location: /home/mhb11/.virtualenvs/myvirtualenv/local/lib/python2.7/site-packages/storages/backends/azure_storage.py in exists, line 46 

Y el fragmento relevante del código es:

 def exists(self, name): try: self.connection.get_blob_properties( self.azure_container, name) except azure.WindowsAzureMissingResourceError: return False else: return True 

Parece que la conexión al contenedor de Azure está fallando. En mi settings.py, tengo:

  DEFAULT_FILE_STORAGE = 'storages.backends.azure_storage.AzureStorage' AZURE_ACCOUNT_NAME = 'photodatabasestorage' AZURE_ACCOUNT_KEY = 'something' AZURE_CONTAINER = 'somecontainer' 

Como se describió anteriormente, necesito una solución que omita los almacenamientos de django por completo, y solo confíe en el SDK de almacenamiento de Azure para realizar el trabajo.

Nota: pídeme más información en caso de que la necesite.

Podemos usar directamente el SDK de Python de Azure-Storage en las aplicaciones de Django al igual que usar el SDK en las aplicaciones comunes de Python. Puedes consultar la guía oficial para empezar.

Aquí está el fragmento de código de prueba en la aplicación Django:

 def putfiles(request): blob_service = BlobService(account_name=accountName, account_key=accountKey) PROJECT_ROOT = path.dirname(path.abspath(path.dirname(__file__))) try: blob_service.put_block_blob_from_path( 'mycontainer', '123.jpg', path.join(path.join(PROJECT_ROOT,'uploads'),'123.jpg'), x_ms_blob_content_type='image/jpg' ) result = True except: print(sys.exc_info()[1]) result = False return HttpResponse(result) def listfiles(request): blob_service = BlobService(account_name=accountName, account_key=accountKey) blobs = [] result = [] marker = None while True: batch = blob_service.list_blobs('mycontainer', marker=marker) blobs.extend(batch) if not batch.next_marker: break marker = batch.next_marker for blob in blobs: result.extend([{'name':blob.name}]) return HttpResponse(json.dumps(result))