Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为自己的python包的init集成设置文件的最佳实践?_Python_Django - Fatal编程技术网

如何为自己的python包的init集成设置文件的最佳实践?

如何为自己的python包的init集成设置文件的最佳实践?,python,django,Python,Django,我已经创建了一个自己的python包(我们称之为ownerep),在其中我需要使用配置设置,例如 数据库访问地址、凭证等 我想在其他项目中使用自己的包。现在,我想避免的是我的 凭证是在OwnRep中硬编码的。因此,我开始考虑初始化 我的OwnRep软件包具有类似于Django和SciPy的设置,因此 软件包的设置是动态设置的 有什么解决方案吗? 概念图作为链接附加 将凭据放入您的环境中。这样更安全。然后创建一个名为settings.py的文件或任何您想要的文件,并执行以下操作: DATABASE

我已经创建了一个自己的python包(我们称之为ownerep),在其中我需要使用配置设置,例如 数据库访问地址、凭证等

我想在其他项目中使用自己的包。现在,我想避免的是我的 凭证是在OwnRep中硬编码的。因此,我开始考虑初始化 我的OwnRep软件包具有类似于Django和SciPy的设置,因此 软件包的设置是动态设置的

有什么解决方案吗? 概念图作为链接附加
将凭据放入您的环境中。这样更安全。然后创建一个名为settings.py的文件或任何您想要的文件,并执行以下操作:

DATABASES = {
    'default': {
        'ENGINE': 'your_engine',
        'USER': os.environ.get('DB_USER'),
        'PASSWORD': os.environ.get('DB_PASSWORD'),
        'HOST': '127.0.0.1',
        'PORT': '5432',
        'NAME': os.environ.get('DB_NAME'),
    }
}

要实现这一点,您需要确保在实例化自己的包时提供了所有必需的凭据(api_密钥、用户名、密码)。这可以通过将实际信息传递给您自己的包或通过读取环境变量来完成

让我们举几个真实世界的例子:

  • Sendgrid:
  • 在上面的代码片段中,为了能够访问sendgrid API,我们需要提供API_密钥。api_键可以从名为SENDGRID_api_键的环境变量接收,即使后面的实现也执行完全相同的操作。请查看更多实施细节

  • Oy客户端(我创建的Python包):
  • 在上面的代码片段中,为了能够访问API,我们需要提供基本url(指向它的位置)和API密钥


    通过这两个示例,我们可以根据需要在自己的代码上实现可移植性和安全性。无需在您自己的软件包中硬编码配置/凭据。

    谢谢,这绝对有效。但是,您知道保存嵌套结构的最佳解决方案是什么吗?例如,如果保存两个数据库名称?
    import sendgrid
    import os
    from sendgrid.helpers.mail import *
    
    sg = sendgrid.SendGridAPIClient(api_key=os.environ.get('SENDGRID_API_KEY'))
    from_email = Email("test@example.com")
    to_email = To("test@example.com")
    subject = "Sending with SendGrid is Fun"
    content = Content("text/plain", "and easy to do anywhere, even with Python")
    mail = Mail(from_email, to_email, subject, content)
    response = sg.client.mail.send.post(request_body=mail.get())
    
    from oy import build_client
    oy_client = build_client("https://sandbox.oyindonesia.com/staging/partner", "username", "api-key")
    oy_client.get_balance()