【问题标题】:How to use django-google-cloud-storage for GCS in Django on GAE如何在 GAE 上的 Django 中使用 django-google-cloud-storage 进行 GCS
【发布时间】:2016-11-06 16:06:23
【问题描述】:

如何将 Django 自定义存储后端与 Google Cloud Storage 结合使用?

尝试使用这个:ckopanos's django-google-cloud-storage

根据文档,我已将以下内容添加到我的“settings.py”中:

GOOGLE_CLOUD_STORAGE_BUCKET = [my bucket name] # the name of the bucket you have created from the google cloud storage console
GOOGLE_CLOUD_STORAGE_URL = [my bucket URL] #whatever the url for accessing your cloud storgage bucket
GOOGLE_CLOUD_STORAGE_DEFAULT_CACHE_CONTROL = [cache control] # default cache control headers for your files

DEFAULT_FILE_STORAGE = 'google.storage.googleCloud.GoogleCloudStorage'

我将“google”文件夹/包添加到我的项目文件中,因此“settings.py”应该可以访问它

我现在如何在我的视图中使用此自定义存储系统?

我可以通过执行以下操作手动使用 gcs(此示例在 gcs 上存储 xlsx):

import cloudstorage as gcs
from google.appengine.api import app_identity
import xlsxwriter
import StringIO

bucket_name = os.environ.get('BUCKET_NAME',
                           app_identity.get_default_gcs_bucket_name())
bucket = '/' + bucket_name

filename = bucket + '/'+ userid + '/' + [some code] + '.xlsx' 
gcs_file = gcs.open(filename,
            'w',
            content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
            options={'x-goog-meta-user': userid})

output = StringIO.StringIO()
workbook = xlsxwriter.Workbook(output, {'in_memory': True})
worksheet = workbook.add_worksheet()

worksheet.write(0, 0, 'Hello World')

# Close the workbook before streaming the data.
workbook.close()

# Rewind the buffer.
output.seek(0)            

gcs_file.write(output.read())
gcs_file.close()

如何导入存储系统以在我的视图中使用?你会为 Django 和 GCS 推荐不同的存储系统吗?

【问题讨论】:

  • 谁推荐的?目的是什么?
  • 对不起,让我换个说法。将 Django 与 Cloud Storage 连接起来的最简单方法是什么,或者最容易实现包(仍在维护)?无需编写我自己的自定义存储系统。 (即,是否有一个我可以使用的“即插即用”包得到维护,并且开发开销很小)。目的是:将 xlsx、xls 和 csv 文件从多个用户上传到 gcs,并允许私人下载这些相同的文件(仅限于上传文件的用户)。
  • 寻找一个包显然是题外话,最简单的方法可能过于基于意见。请参阅How to Ask
  • 好吧,我已经把问题更具体了,针对我一直在尝试使用的特定包。

标签: python django google-app-engine google-cloud-storage django-storage


【解决方案1】:

就像您在 Django 中使用任何其他文件存储系统的方式一样,因为 Django 中的自定义存储后端是通过定义一个必须是 subclass of django.core.files.storage.Storage 的自定义存储类来构建的。

django-cloud-storage 是一个自定义存储后端,它允许您在 Django 中使用 GCS,就像您使用任何其他存储后端一样。

DEFAULT_FILE_STORAGE = 'google.storage.googleCloud.GoogleCloudStorage'

settings.py 中的上述行使 GCS 成为您的默认文件存储系统。 这意味着如果您在 models 中定义一个新的 FileField,它将使用 Google Cloud Storage。

您可以像这样在视图中使用它:

from django.core.files.storage import default_storage
file = default_storage.open(file_name, 'w')
file.write(output.read())
file.close()

文件将保存到您的默认存储桶中。

【讨论】:

  • 谢谢,这就是我最终使用它的方式。我很困惑,因为在阅读文档时,它似乎暗示如果您使用 from django.core.files.storage import default_storage 导入“default_storage”,它将导入 Django 的 默认存储系统(文件系统存储)而不是您的 settings.py定义了 DEFAULT_FILE_STORAGE 系统。
猜你喜欢
  • 1970-01-01
  • 2018-07-27
  • 2021-12-09
  • 2013-11-02
  • 2021-11-22
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多