使用 gspread API client_secret.json 从 Git 存储库部署 Flask 应用程序
Deploy Flask application from Git repository with gspread API client_secret.json
我想在 heroku 上部署一个 flask 应用程序,在 flask 应用程序中我使用 Google Sheets API 和 gspread。要进行身份验证,您会得到一个 client_secret.json 文件,您需要将其插入到 ServiceAccountCredentials.from_json_keyfile_name()
。当你这样做时,我将 json 文件中的所有变量保存为环境变量,并像这样获取它们:
def create_keyfile_dict():
variables_keys = {
"type": os.environ.get("SHEET_TYPE"),
"project_id": os.environ.get("SHEET_PROJECT_ID"),
"private_key_id": os.environ.get("SHEET_PRIVATE_KEY_ID"),
"private_key": os.environ.get("SHEET_PRIVATE_KEY"),
"client_email": os.environ.get("SHEET_CLIENT_EMAIL"),
"client_id": os.environ.get("SHEET_CLIENT_ID"),
"auth_uri": os.environ.get("SHEET_AUTH_URI"),
"token_uri": os.environ.get("SHEET_TOKEN_URI"),
"auth_provider_x509_cert_url": os.environ.get("SHEET_AUTH_PROVIDER_X509_CERT_URL"),
"client_x509_cert_url": os.environ.get("SHEET_CLIENT_X509_CERT_URL")
}
return variables_keys
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name(create_keyfile_dict(), scope)
但后来我得到了错误:
with open(filename, 'r') as file_obj:
FileNotFoundError: [Errno 2] No such file or directory: 'client_secret'
因为 gspread 想要一个文件,而不是我的函数 returns 的字典。
所以问题或多或少(如果没有更好的方法)我应该如何将环境变量获取到一个只在 heroku 而不是 GitHub 上并且可以被 gspread 读取的文件。
与其使用 ServiceAccountCredentials
附带的方法来读取 google 发送给您的 JSON 凭据文件,您可以使用以下方法:
我想在 heroku 上部署一个 flask 应用程序,在 flask 应用程序中我使用 Google Sheets API 和 gspread。要进行身份验证,您会得到一个 client_secret.json 文件,您需要将其插入到 ServiceAccountCredentials.from_json_keyfile_name()
。当你这样做时,我将 json 文件中的所有变量保存为环境变量,并像这样获取它们:
def create_keyfile_dict():
variables_keys = {
"type": os.environ.get("SHEET_TYPE"),
"project_id": os.environ.get("SHEET_PROJECT_ID"),
"private_key_id": os.environ.get("SHEET_PRIVATE_KEY_ID"),
"private_key": os.environ.get("SHEET_PRIVATE_KEY"),
"client_email": os.environ.get("SHEET_CLIENT_EMAIL"),
"client_id": os.environ.get("SHEET_CLIENT_ID"),
"auth_uri": os.environ.get("SHEET_AUTH_URI"),
"token_uri": os.environ.get("SHEET_TOKEN_URI"),
"auth_provider_x509_cert_url": os.environ.get("SHEET_AUTH_PROVIDER_X509_CERT_URL"),
"client_x509_cert_url": os.environ.get("SHEET_CLIENT_X509_CERT_URL")
}
return variables_keys
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name(create_keyfile_dict(), scope)
但后来我得到了错误:
with open(filename, 'r') as file_obj:
FileNotFoundError: [Errno 2] No such file or directory: 'client_secret'
因为 gspread 想要一个文件,而不是我的函数 returns 的字典。 所以问题或多或少(如果没有更好的方法)我应该如何将环境变量获取到一个只在 heroku 而不是 GitHub 上并且可以被 gspread 读取的文件。
与其使用 ServiceAccountCredentials
附带的方法来读取 google 发送给您的 JSON 凭据文件,您可以使用以下方法: