我正在使用os.getenv
设置Django,以准备使用Docker进行部署,但似乎没有读取.env
文件。任何想法为什么不读它?
以下是设置:
.env
SECRET_KEY=foo
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1
settings.py
抽象
import os
from pathlib import Path
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = os.getenv('SECRET_KEY')
DEBUG = os.getenv('DEBUG')
ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS')
要从 Docker 或我使用的 AWS 弹性豆茎中获取环境变量,请使用 os.environ.get('SECRET_KEY'),
这通常比 os.environ ['SECRET_KEY']
更可靠。
我正在使用python-dotenv来实现dotenv功能。如果你想让Django找到你的. env文件,你需要修改manage.py和wsgi.py文件。
# manage.py
import os
import sys
import dotenv
def main():
"""Run administrative tasks."""
# dotenv settings
dotenv.load_dotenv(
os.path.join(os.path.dirname(__file__), '.env')
)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
if os.getenv('DJANGO_SETTINGS_MODULE'):
os.environ['DJANGO_SETTINGS_MODULE'] = os.getenv('DJANGO_SETTINGS_MODULE')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
# wsgi.py
import os
import dotenv
from django.core.wsgi import get_wsgi_application
# dotenv settings
dotenv.load_dotenv(
os.path.join(os.path.dirname(os.path.dirname(__file__)), '.env')
)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
if os.getenv('DJANGO_SETTINGS_MODULE'):
os.environ['DJANGO_SETTINGS_MODULE'] = os.getenv('DJANGO_SETTINGS_MODULE')
application = get_wsgi_application()
您可以使用python解耦来获取存储在.env文件中的项目根目录中的环境变量。
from decouple import config
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=False, cast=bool)
EMAIL_HOST = config('EMAIL_HOST', default='localhost')
EMAIL_PORT = config('EMAIL_PORT', default=25, cast=int)
注意:要应用更改,您需要重新启动服务器。
问题内容: 我正在尝试设置包括一些基本设置的多个设置文件(开发,生产等)。虽然无法成功。当我尝试运行时,出现以下错误: 这是我的设置模块: 基本设置(包含SECRET_KEY): 设置文件之一: 代码在manage.py: 如果添加到(否则为空),它会神奇地开始工作,但我不明白为什么。任何人都可以向我解释这是怎么回事?它一定是一些python模块魔术。 编辑:如果我从base.py删除此行,一切也
问题内容: 我做了一些Google搜索,并检查了文档(https://docs.djangoproject.com/en/dev/ref/settings/#secret- key ),但是我正在寻找对此的更深入的说明,以及为什么需要它。 例如,如果密钥被泄露/其他人知道密钥是什么,会发生什么? 问题答案: 它用于制作哈希。看:
问题内容: 我正在尝试设置Flask-Debugtoolbar,但收到消息“ DebugToolBar需要SECRET_KEY”。我从哪里获得密钥? 问题答案: 该 密钥 是需要保持客户端会话安全。您可以生成一些随机密钥,如下所示: 只需获取该密钥并将其复制/粘贴到您的配置文件中 请参阅会议文档
在try块中为未抛出异常子类的方法捕获异常,将无法编译。当我捕捉到异常时,它起作用了。它是如何工作的??
下面是我的代码。当我运行它时,我在线程“main”java.lang.IndexOutOfBoundsException:Index:3、Size:2中得到异常,而不是我的异常消息。谁能解释一下我做错了什么,为什么会这样?谢谢!
我得到一个奇怪的错误: blank=true,null=true)文件“/mypath/lib/python2.7/site-packages/django/forms/fields.py”,第214行,在init super(CharField,self)中。init(*args,**kwargs)类型错误:init()获得意外的关键字参数“null” 在没有收到此错误的情况下,如何使此字段不是