Python 如何在Django中链接到我的GCS Bucket JSON凭据文件?

Python 如何在Django中链接到我的GCS Bucket JSON凭据文件?,python,json,django,google-cloud-storage,Python,Json,Django,Google Cloud Storage,我正在使用Django gcloud存储库允许我的Django应用程序在GCS上存储图像 我已经创建了一个bucket、GCS服务帐户,并根据需要下载了一个JSON密钥文件。但是,将映像保存到云存储会引发以下错误: AssertionError at /showroom/create/ Credentials file not found ... /srv/showroom/views.py in form_valid images.save() … ▶ Lo

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

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

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

设置.py

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非常不熟悉,如果这是一个新手问题,请原谅我。:-)

开箱即用,
BASE_DIR
是包含
manage.py
模块的文件夹

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

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

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

根据,我建议配置一个环境变量并将其内容写入其中

您可以在
env_文件中执行此操作,也可以简单地导出到shell环境中

export GCS_凭证=`cat/path到GCS凭证文件`
然后将环境变量写入
设置
模块中的
静态
文件夹以外的位置

#从env_文件加载环境变量(如果有)
# https://pypi.org/project/python-dotenv/
从dotenv导入加载\u dotenv
env_path=os.path.join(BASE_DIR,'.env')
加载点环境(点环境路径=环境路径)
#这可以是应用程序具有读/写权限的任何路径
GCS\u凭证\u文件\u路径=os.PATH.join(基本目录,.GCS\u凭证\u文件)
打开(GCS\U凭证\U文件\U路径,“w”)作为f:
f、 写入(os.getenv('GCS_凭据'))

另外,请记住省略
.gcs\u凭证\u文件
或您从版本控制中为文件决定的任何名称。

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

.env

GCS\u凭证=

然后在Django,你可以这样做


os.getenv(“GCS\U凭证”)

环境文件究竟是如何工作的?是否在项目中创建扩展名为.env的新文件?
.env
类似于存储环境变量的文件。基本上,它可以让您更好地控制应用程序/服务中使用的环境变量。它的工作原理类似于
expose$GSC\u CREDENTIALS=