gpt4 book ai didi

django - 将 Django 设置传输到环境变量

转载 作者:行者123 更新时间:2023-12-04 18:26:00 26 4
gpt4 key购买 nike

我在本地 ubuntu mashine 和 AWS Ubuntu 服务器上使用根文件夹中的 .bashrc 文件设置了 django 项目设置并为环境变量添加了值。

...
export DEBUG="True"
...

settings.py

...
SECRET_KEY = os.environ.get('SECRET_KEY')
DEBUG = os.environ.get('DEBUG', False)
...

在本地一切正常,但在生产服务器上没有导入值。为什么它不能在两台机器上工作?如何设置生产?

我正在使用 asgi 服务器 daphne 运行生产服务器,因此这 tutorial

更新

asgi.py

import os
import django
from channels.routing import get_default_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
django.setup()
application = get_default_application()

最佳答案

所以,我通常做的是:我有一个脚本,它在 Django 安装时运行,并创建一个包含一些值的 .env 文件。

project_setup.py

import os
import random
import string


def write_dot_env_file(env_file):
settings = get_settings()
with open(env_file, 'w') as f:
for k, v in settings.items():
f.write(f'{k.upper()}={v}\n')


def get_settings():
return {
'SECRET_KEY': generate_secret_key(),
'DEBUG': True,
'ALLOWED_HOSTS': '*',
}


def generate_secret_key():
specials = '!@#$%^&*(-_=+)'
chars = string.ascii_lowercase + string.digits + specials
return ''.join(random.choice(chars) for _ in range(50))


def main():
env_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), '.env')

if not os.path.isfile(env_file):
write_dot_env_file(env_file)
else:
pass


if __name__ == '__main__':
main()

然后在我的 manage.pywsgi.py 上,就在 Django 设置路径之前:

管理.py

#!/usr/bin/env python
import os
import sys
from project_setup import main as project_setup_main

if __name__ == '__main__':
project_setup_main()
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'yoursettings')
...

就是这样。当 Django 运行时,它会为您创建一个满足最低要求的 .env 文件。或者您可以在 settings.py 中创建函数 generate_secret_key 并将其用作您的 SECRET_KEY 声明的默认值,例如: SECRET_KEY = os.environ.get('SECRET_KEY', get_secret_key())

关于django - 将 Django 设置传输到环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57559382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com