使用 azure 作为 Django 的存储后端(使用 django-storages)

Posted

技术标签:

【中文标题】使用 azure 作为 Django 的存储后端(使用 django-storages)【英文标题】:Using azure as a storage backend for Django (using django-storages) 【发布时间】:2016-01-14 02:26:54 【问题描述】:

我正在使用 django-storages,我过去曾用它来处理 AWS S3。但是在使用 Microsoft Azure 时,我遇到了在谷歌上没有返回任何结果的错误。

我正在使用 python 3 和 Django 1.8.4 进行开发。我正在使用 django-storages 和 django-storages-redux 来支持 python 3。

当调用 ./manage.py collectstatic 并输入 yes 时,我收到两个 (!) 错误:

Traceback (most recent call last):
  File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/storages/backends/azure_storage.py", line 44, in exists
    self.connection.get_blob_properties(
  File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/storages/backends/azure_storage.py", line 34, in connection
    self._connection = azure.storage.BlobService(
AttributeError: 'module' object has no attribute 'BlobService'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
    utility.execute()
  File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/core/management/__init__.py", line 330, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/core/management/base.py", line 393, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/core/management/base.py", line 444, in execute
    output = self.handle(*args, **options)
  File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 168, in handle
    collected = self.collect()
  File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 107, in collect
    handler(path, prefixed_path, storage)
  File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 305, in copy_file
    if not self.delete_file(path, prefixed_path, source_storage):
  File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 218, in delete_file
    if self.storage.exists(prefixed_path):
  File "/Users/mac/.virtualenvs/bratwurst/lib/python3.4/site-packages/storages/backends/azure_storage.py", line 46, in exists
    except azure.WindowsAzureMissingResourceError:
AttributeError: 'module' object has no attribute 'WindowsAzureMissingResourceError'

我遵循了将 django-storages 与 azure here 结合使用的简单说明。

任何想法可能导致此错误?有没有人成功部署了一个 django 1.8 应用程序,将 azure 作为存储和静态文件后端?

edit: 我在 django-storages 模块中做了一些修改: 使用

import azure.storage.blob
self._connection = azure.storage.blob.blobservice.BlobService(

而不仅仅是

self._connection = azure.storage.BlobService(

但是现在我遇到了不同的错误,这让我相信这个问题实际上更深层次。

【问题讨论】:

【参考方案1】:

我找到了问题:

django-storages-redux 已经过时,与最新版本的 azure sdk 不兼容

作者的拉取请求正在进行中:

https://github.com/jschneier/django-storages/pull/86

我在这里做了自己的快速修复:

https://github.com/schumannd/django-storages

【讨论】:

【参考方案2】:

由于您在我们的存储库之上使用存储平台,我们的支持可能会受到限制。看起来对 python 客户端库的重组和重命名部分进行了更改,并且您使用的“Azure-Storage”平台没有更新他们的工具。其他人在使用这个平台时也遇到了类似的问题。请参阅针对 Django-storages 提出的以下问题:https://bitbucket.org/david/django-storages/issues/225/azure-storages-are-incorrectly-imported

查看您的 Django 解决方案的“后端”文件,看起来与直接使用我们的存储服务相比,这为您提供的便利很少。您可能需要考虑使用我们的库,因为它将为您提供最大的数据存储灵活性。如果您更喜欢使用 Django-storages,您可以联系他们,看看他们是否会修复它或分叉他们的代码库并自己进行修复。你可以在这里看到我们为改进这个库所做的所有工作: https://github.com/Azure/azure-storage-python/tree/dev

谢谢!

【讨论】:

MS 产品是否直接支持 Django 存储 API?

以上是关于使用 azure 作为 Django 的存储后端(使用 django-storages)的主要内容,如果未能解决你的问题,请参考以下文章

在 azure 后端存储中使用状态文件将 terraform 的输出传递到 Azure Devops Pipeline

使用Excel作为前端,Azure作为后端

Terraform 后端到 azure blob 存储错误

为什么我的Django应用程序在Azure上使用UUID无效语法失败

使用 Azure SQL 服务器作为后端数据库运行 Apache Airflow

Django rest 框架 - 将图像上传到 Azure 存储