【问题标题】:Why can I retrieve environment variable in one part of my code, but not another?为什么我可以在我的代码的一部分中检索环境变量,而不能在另一部分中检索环境变量?
【发布时间】:2020-02-28 12:50:19
【问题描述】:

我已将 API 令牌作为环境变量存储在我的 wsgi 文件中。我可以在我的 Django 应用程序的一个实例中检索它,但不能在另一个实例中检索它。

我能够在我的管理员的 save_model 操作期间成功使用令牌。当我在管理命令中使用几乎相同的代码时,我得到一个身份验证错误。

我的 wsgi.py 文件:

import os    
import sys
from django.core.wsgi import get_wsgi_application

os.environ['SLACK_TOKEN'] = '12344567890qazxswedcvfrtgbnhyujmkiolp'
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
application = get_wsgi_application()

工作 admin.py 用法:

import os
from slacker import Slacker

    def save_model(self, request, obj, form, change):
            if obj.condition == True:
                super().save_model(request, obj, form, change)
                token = os.getenv('SLACK_TOKEN')
                slack = Slacker(token)
                slack.chat.post_message('#test-channel', 'mymessage')

不工作的管理命令用法:

import os
from slacker import Slacker

    def handle(self, *args, **options):
        try:
            #test condition
        except:
            token = os.getenv('SLACK_TOKEN')
            slack = Slacker(token)
            slack.chat.post_message('#newsflow-test', 'mymessage')

故障排除表明 env 变量未加载——当我运行管理命令或尝试在 Django shell 中检索令牌时,print(token) 产生无响应。

【问题讨论】:

    标签: django environment-variables django-wsgi


    【解决方案1】:

    wsgi.py 由您的 Python 应用程序服务器导入,例如独角兽。管理命令直接执行,绕过导入wsgi.py。你应该使用一些机制,例如django-dotenv 从你的 manage.py 脚本和 wsgi.py 应用初始化程序中的 .env 文件加载环境变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      相关资源
      最近更新 更多