[英]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_environ
和dotenv
也存在同樣的問題。
檢索.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.