簡體   English   中英

當生成的 SECRET_KEY 以“$”開頭時,如何從環境文件中轉義 Django 中的 SECRET_KEY?

[英]How to escape SECRET_KEY in Django from environment file when generated SECRET_KEY begins with '$'?

在我的 Django 項目中,我有一個.env文件,其中包含用於生產設置的SECRET_KEY

我通過從命令行運行腳本來生成密鑰(這里它只是打印生成的密鑰作為示例)。

python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'

碰巧生成了一個以'$'字符開頭的密鑰。

我的.env文件看起來像這樣。

DJANGO_SECRET_KEY=$*%0e@-7suq*h#2(srya8n&lhb(qy+73xj_db)tpq4qenknk2%

這是通過以下方式在我的生產設置文件中讀取的

import os
import environ

env = environ.Env()

# BASE_DIR is the root level directory of the project
env_file = os.path.join(BASE_DIR, '.env')
if os.path.exists(env_file):
    environ.Env.read_env(env_file=env_file) # reading .env file

SECRET_KEY = env('DJANGO_SECRET_KEY')

當我使用此密鑰運行我的 Django 項目時,出現以下錯誤

django.core.exceptions.ImproperlyConfigured: Set the *%0e@-7suq*h#2(srya8n&lhb(qy+73xj_db)tpq4qenknk2% environment variable

由於'$'字符 Django 似乎認為密鑰值本身就是一個環境變量。 這是可以理解的,因為 Bash 中的環境變量具有'$'前綴。

但是當我嘗試將 .env 文件更改為

DJANGO_SECRET_KEY='$*%0e@-7suq*h#2(srya8n&lhb(qy+73xj_db)tpq4qenknk2%'

或者

DJANGO_SECRET_KEY="$*%0e@-7suq*h#2(srya8n&lhb(qy+73xj_db)tpq4qenknk2%"

我犯了同樣的錯誤。

如果生成帶有前導'$'密鑰(使用我的生產設置代碼在 DJango 中工作),我如何轉義 an.env 文件中的 SECRET_KEY?


django 版本:3.0.3

django 環境版本:0.4.5

本文建議使用 pip 安裝dotenv並徹底簡化隱藏密鑰的過程。 至少對於初學者來說。

似乎有兩種方法可以解決這個問題。

首先是使用django_environ .env文件中的內容:

#.env
SECRET_KEY=(str, '$*%0e@-7suq*h#2(srya8n&lhb(qy+73xj_db)tpq4qenknk2%')

另一種方法是按照上面鏈接的文章( https://dev.to/vladyslavnua/how-to-protect-your-django-secret-and-oauth-keys-53fl )中的說明進行操作,這有效地表明django_environdotenv也存在同樣的問題。

檢索.env值時(使用dotenv ):

#settings.py
SECRET_KEY = str(os.getenv('SECRET_KEY'))

在這兩種情況下,您都明確向 django 指示檢索到的值是字符串。 您可能會遇到類似這樣的其他問題,並且需要明確返回的數據類型:

#.env
DEBUG=(bool, True)
SOME_INT=(int, 1)
…

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM