2015-12-14 3 views
5

क्या किसी को भी Django के साथ azure-storage का उपयोग करने पर कोई सुझाव है? मैं पूछता हूं क्योंकि वर्तमान में मैं अपने Django ऐप के लिए Azure क्लाउड स्टोरेज सेट अप करने की कोशिश कर रहा हूं (उबंटू ओएस के साथ एज़ूर वीएम पर होस्ट किया गया), और django-storages अज़ूर स्टोरेज एसडीके के साथ सही ढंग से इंटरफेसिंग नहीं लग रहा है (ज्ञात समस्या: see here)। मेरे डीजेगो संस्करण < 1.6.2 दिए गए फिक्स में सूचीबद्ध फिक्स मेरे लिए काम नहीं करेगा।Django के साथ एज़ूर स्टोरेज एसडीके का उपयोग करना (और पूरी तरह से django-storages पर निर्भरता को हटा देना)

इस प्रकार मुझे Django के साथ सीधे Azure-storage का उपयोग करने की आवश्यकता होगी। क्या किसी ने इसे पहले स्थापित किया है? मुझे क्लाउड स्टोरेज पर छवियों और एमपी 3 को सहेजने की आवश्यकता है।


वर्तमान में, मेरी models.py में, मेरे पास है:

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) 

और फिर django-storages और बाकी के boto ले देखभाल। हालांकि, जब मैं Django-भंडार Azure क्लाउड संग्रहण के साथ हुक, मैं निम्नलिखित त्रुटि मिलती है:

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 

और कोड के प्रासंगिक टुकड़ा है:

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

लगता है कि Azure करने के लिए कनेक्शन कंटेनर असफल रहा है। मेरी settings.py में, मेरे पास है:

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

पहले वर्णित के रूप में, मैं एक समाधान है कि Django-भंडार पूरी तरह से नजरअंदाज जरूरत है, और सिर्फ काम किया पाने के लिए Azure संग्रहण एसडीके पर निर्भर करता है।

नोट: यदि आपको इसकी आवश्यकता हो तो मुझे अधिक जानकारी के लिए पूछें।

उत्तर

2

हम सामान्य पिथन अनुप्रयोगों में एसडीके का उपयोग करने जैसे डीजेंगो ऐप्स में सीधे Azure-Storage python SDK का उपयोग कर सकते हैं। शुरू करने के लिए आप official guide देख सकते हैं।

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)) 
+0

आप जल्दी से स्पष्ट कर सकते हैं क्या 'PROJECT_ROOT' है:

यहाँ Django अनुप्रयोग में परीक्षण कोड का टुकड़ा है? –

+0

यह ओएस –

+0

हम्म में आपके एप्लिकेशन का एब्स पथ है, इसलिए मुझे किसी भी तरह से 'blob_service.put_block_blob_from_path' (या' put_block_blob_from_file') के साथ मेरी छवि फ़ील्ड विशेषता में 'upload_to' को ओवरराइड करने की आवश्यकता होगी)? –

संबंधित मुद्दे