Django env设置在检查env变量是否为s之前进行计算

2024-04-26 04:20:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用values.SecretValue()来设置我的aws bucket名称。要设置Django过去使用的媒体url,请执行以下操作:

AWS_STORAGE_BUCKET_NAME = values.SecretValue()
MEDIA_URL = 'https://s3.amazonaws.com/{}/'.format(AWS_STORAGE_BUCKET_NAME)

现在,即使AWS\u STORAGE\u BUCKET\u NAME正确地从set enironmental varaible中提取值,MEDIA\u URL也是https://s3.amazonaws.com/None/。你知道吗

可通过以下设置进行复制:

class Production(Common):

  AWS_ACCESS_KEY_ID = values.SecretValue()
  AWS_SECRET_ACCESS_KEY = values.SecretValue()
  AWS_STORAGE_BUCKET_NAME = values.SecretValue()
  MEDIA_URL = 'https://s3.amazonaws.com/{}/'.format(AWS_STORAGE_BUCKET_NAME)

  print MEDIA_URL, AWS_STORAGE_BUCKET_NAME
  # -> https://s3.amazonaws.com/None/ None

用这个运行服务器管理.py地址:

import os
import sys
from django.conf import settings

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config")
    os.environ.setdefault("DJANGO_CONFIGURATION", "Production")
    os.environ.setdefault("DJANGO_AWS_STORAGE_BUCKET_NAME", "my-bucket")
    os.environ.setdefault("DJANGO_SECRET_KEY", "my-secret")
    os.environ.setdefault("DJANGO_AWS_ACCESS_KEY_ID", "my-key")
    os.environ.setdefault("DJANGO_AWS_SECRET_ACCESS_KEY", "my-secret-key")

    print settings.MEDIA_URL, settings.AWS_STORAGE_BUCKET_NAME, os.environ.get('DJANGO_AWS_STORAGE_BUCKET_NAME')
    # -> https://s3.amazonaws.com/None/ my-bucket my-bucket

    from configurations.management import execute_from_command_line
    execute_from_command_line(sys.argv)

临时修复是使用属性在每次调用变量时对其求值:

@property
def MEDIA_URL(self):
    return 'https://s3.amazonaws.com/{}/'.format(Production.AWS_STORAGE_BUCKET_NAME)

但是在初始化时设置这个值更有意义。你知道吗

使用Django配置1.0,和Django 1.9.2。你知道吗


Tags: djangonamehttpscomawsurls3bucket
1条回答
网友
1楼 · 发布于 2024-04-26 04:20:56

也许你可以尝试一些懒惰的东西:

from django.utils.functional import lazy

def get_media_url():
    from django.conf import settings
    return 'https://s3.amazonaws.com/{}/'.format(settings.AWS_STORAGE_BUCKET_NAME)

MEDIA_URL = lazy(get_media_url)()

相关问题 更多 >