首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何链接到Django中的GCS凭据文件?

如何链接到Django中的GCS凭据文件?
EN

Stack Overflow用户
提问于 2019-10-27 08:41:37
回答 2查看 985关注 0票数 1

我正在使用Django -gcloud存储库来允许我的Django应用程序在GCS上存储图像。

我已经创建了一个桶,GCS服务帐户,并根据给导游下载了一个JSON密钥文件。但是,将映像保存到云存储会引发以下错误:

代码语言:javascript
复制
AssertionError at /showroom/create/
Credentials file not found

...

/srv/showroom/views.py in form_valid
                images.save() …
▶ Local vars
...
/env/lib/python3.7/site-packages/django_gcloud_storage/__init__.py in __init__
        assert os.path.exists(self.credentials_file_path), "Credentials file not found" …
▶ Local vars

(展厅/创建是上传表单)。

我将JSON凭据文件存储在静态文件夹static/js/torque-xxx-02827c7cc0ad.json

settings.py

代码语言:javascript
复制
GCS_PROJECT = "torque-xxx"

GCS_BUCKET = "torque-xxx.appspot.com"

GCS_CREDENTIALS_FILE_PATH = os.path.join(BASE_DIR, 'static', 'js', 'torque-xxx-02827c7cc0ad.json')
# GCS_CREDENTIALS_FILE_PATH = '/static/js/torque-xxx-02827c7cc0ad.json' ## This was my first try, didn't work

# DEFAULT_FILE_STORAGE = 'google.storage.googleCloud.GoogleCloudStorage'
DEFAULT_FILE_STORAGE = 'django_gcloud_storage.DjangoGCloudStorage'

我对云存储和API非常陌生,所以如果这是一个新手问题,请原谅我。:-)

EN

回答 2

Stack Overflow用户

发布于 2019-10-27 09:43:20

BASE_DIR是包含manage.py模块的文件夹。

检查以确认那里有一个静态文件夹。

将GCS凭据文件存储在静态文件中会带来安全风险,因为它包含服务帐户密钥。

通常,它可以存储在其他不能公开访问的位置。

根据12要素应用方法,我建议配置一个环境变量并将其内容写入其中。

您可以在env_file中这样做,也可以简单地导出到您的shell环境中。

代码语言:javascript
复制
export GCS_CREDENTIALS=`cat /path-to-gcs-credentials-file`

然后将环境变量写入settings模块中settings文件夹以外位置的文件。

代码语言:javascript
复制
# Load environment variables from env_file if any
# https://pypi.org/project/python-dotenv/

from dotenv import load_dotenv

env_path = os.path.join(BASE_DIR, '.env')
load_dotenv(dotenv_path=env_path)


# This could be any path that the application has read/write permission to
GCS_CREDENTIALS_FILE_PATH = os.path.join(BASE_DIR, '.gcs_credentials_file') 
with open(GCS_CREDENTIALS_FILE_PATH, 'w') as f:
    f.write(os.getenv('GCS_CREDENTIALS'))

此外,请记住省略.gcs_credentials_file或您从版本控制中为该文件决定的任何名称。

票数 1
EN

Stack Overflow用户

发布于 2019-10-27 09:54:17

所有Google凭证键都需要存储在环境变量中。例如,您应该创建这样一个.env文件。

.env

GCS_CREDENTIALS=<your credentials key>

然后在Django,你可以这样做

os.getenv('GCS_CREDENTIALS')

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58577790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档