在Python / Django环境中存储配置

2023-12-22

我一直想知道这个问题有一段时间了。也就是说,在使用 Python 和/或 Django 进行项目时,如何将配置与代码库隔离。

特别是,这些想法受到了 Heroku 的 12 个因素之一的启发:三、配置 https://www.12factor.net/config

有哪些方法可以做到这一点?当他用Python,尤其是Django编写项目时,如何才能符合这个要求呢?


使用环境变量

解决这个问题最常见的方法是使用环境变量。

例如,在 Django 应用程序的 settings.py 中,您可以编写以下内容:

import os
if os.getenv("DJANGO_DEBUG") == '1':
    DEBUG = True

API 密钥也非常相似:

import os
API_KEY = os.getenv("API_KEY", None)

另一种方法是使用django-environ package https://github.com/joke2k/django-environ被建议者翻转PA https://stackoverflow.com/questions/45250494/storing-config-in-environment-python-django/45250838#comment77504811_45250838。它的灵感来自 12factor,所以它似乎非常适合这个问题。

如果您使用 Heroku 进行部署,那么您可以在设置下为每个 dyno 编写自己的环境变量。如果您使用其他部署方法(例如 AWS CodeDeploy),您可以编写 shell 脚本来设置环境变量,方法是从安全存储(例如 AWS参数存储 http://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html)

设置环境变量

设置这些环境变量取决于您的操作系统。环境变量也是从命令行继承的,因此对于 Linux,您必须将环境变量添加到运行脚本中,而在 Windows 上,您可以添加系统变量。

Windows系统环境变量(通用可访问的环境变量):

setx API_KEY abcdefghijklmnopqrstuvwxyz123

Windows临时环境变量(运行此命令后调用的所有进程都可以访问该变量):

set API_KEY abcdefghijklmnopqrstuvwxyz123

Linux中为所有进程添加环境变量比较复杂,如下this https://unix.stackexchange.com/a/117470答案是在 shell 启动时自动设置环境变量。

Linux临时环境变量(运行该命令后调用的所有进程都可以访问该变量):

export API_KEY="abcdefghijklmnopqrstuvwxyz123"

测试环境变量

要测试环境变量集,您可以使用以下命令(将“API_KEY”替换为变量名称):

Windows:

echo %API_KEY%

Linux:

echo $API_KEY

如果这些返回的内容与您输入的内容相同,那么它应该可以工作。您可以通过键入以下内容在 python 中尝试:

python

然后您应该看到类似以下内容:

Python 3.6.2 (default, Jul 17 2017, 16:44:45)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

然后你可以编写你的 python 来测试它:

import os
os.getenv("API_KEY")

您应该会看到打印出环境变量的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python / Django环境中存储配置 的相关文章

  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 通过Python连接到Bigquery:ProjectId和DatasetId必须非空

    我编写了以下脚本来通过 SDK 将 Big Query 连接到 Python 如下所示 from google cloud import bigquery client bigquery Client project My First Pr
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • django 迁移地狱,丢了一张表。试图把它找回来

    所以我在数据库中删除了一个表 并且希望将其恢复 重新运行迁移会出现错误表不存在 经过一番搜寻后 我了解到我可以删除 django migrations 中应用程序名为我的应用程序的所有内容 所以我这样做了 重新运行迁移 它开始工作 然后抱怨
  • Spider 必须返回 Request、BaseItem、dict 或 None,已“设置”

    我正在尝试从以下位置下载所有产品的图像 我的蜘蛛看起来像 from shopclues items import ImgData import scrapy class multipleImages scrapy Spider name m
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • 如何使用 PrimaryKeyRelatedField 更新多对多关系上的类别

    Django Rest 框架有一个主键相关字段 http www django rest framework org api guide relations primarykeyrelatedfield其中列出了我的 IDmany to m
  • 如何在Python脚本中从youtube-dl中提取文件大小?

    我是 python 编程新手 我想在下载之前提取视频 音频大小 任何 YouTube 视频 gt gt gt from youtube dl import YoutubeDL gt gt gt url https www youtube c

随机推荐

  • VisNetwork 与 Shiny 的点击事件

    我已经使用 Shiny 中的 visNetwork 包构建了我的网络 我想单击一个节点 然后显示数据框中有关该节点的信息 我已经能够使用单击和近点函数对散点图执行此操作 例如此处显示的 Shiny 示例中的函数 http shiny rst
  • 我可以在 C 程序中使用 cstdio 吗?

    当我添加时 我在 cstdio 中收到大量错误 include
  • 订购 ObservableCollection 而不创建新的 [重复]

    这个问题在这里已经有答案了 我有以下代码来重新订购ObservableCollection
  • 如何合并嵌套字典?

    我有一个嵌套字典 python 3 9 列表 看起来像这样 records Total Owner Available 15 to 34 years 1242 Total Owner Available 35 to 64 years 569
  • Keras 中的指标是如何计算的?

    我想知道 Keras 如何计算一个指标 是否是自定义指标 例如 假设我有以下指标 它产生预测与真实情况之间的最大误差 def max error y true y pred import keras backend as K return
  • 多个 uniqid() 调用不唯一

    我有一个有趣的例子 其中多次重复调用uniqid 当本地托管在 XAMPP 上时 不会生成唯一的编号 这个唯一的 ID 会重复 5 到 20 次 然后就会神秘地发生变化 然而 作为一个有趣的转折 该代码可以工作完美在我们的生产服务器上 这就
  • Chrome 扩展如何基本上 cURL 其他页面? [复制]

    这个问题在这里已经有答案了 我正在考虑编写一个 Chrome 扩展程序 需要在某个网站的某个动态页面上抓取一些链接并分析链接页面的内容 实际上 我对编写浏览器扩展了解不多 所以在我致力于学习如何编写之前 我想看看它是否可行 我确实知道扩展通
  • Python 描述符中实例和所有者的用途是什么?

    我正在尝试理解 Python 中的描述符 我似乎无法理解描述符方法中的实例和所有者是什么 object get self instance owner 现在我已经阅读了文档 https docs python org 3 reference
  • 在 Ruby 中如何测试一个值是否为素数?有简单的方法和困难的方法吗?

    我正在尝试创建一个程序来测试某个值是否为素数 但我不知道如何进行 这是我的代码 class DetermineIfPrime def initialize nth value nth value nth value primetest en
  • 如何配置 Visual Studio 2013 以与 Git/SourceTree 一起使用

    我希望能够将 Git 与 Visual Studio 2013 一起使用 我也希望能够使用 SourceTree 但我不知道两者如何一起使用 我在 Visual Studio 中创建了一个项目 并将其配置为使用 Git 但我不知道存储库是在
  • javascript 中的范围表现得很奇怪

    对象通过 JavaScript 中的引用传递 意味着该对象从任何地方发生的变化都应该得到反映 在本例中 console log a 的预期输出为 function change a b a x added a b assigning a a
  • 基于管道分隔列创建新的 pandas 列并可能重复

    这个问题与我之前的问题的良好解决方案有关 基于 Pandas 中的管道分隔列创建多个新列 https stackoverflow com questions 48010030 create multiple new columns base
  • 如何(轻松)删除 Xcode 6 中 Interface Builder 中的约束

    假设您已选择一个对象 并且 实用程序 面板中的 大小选择器 已打开 您可以看到应用于对象的约束列表 在约束列表中 您可以单击小齿轮并选择删除 在 Xcode 6 中不能 IB中删除约束还有几种方法 在文档大纲中找到约束并以这种方式将其删除
  • SQLAlchemy ORM __init__ 方法与

    In the SQLAlchemy ORM 教程 http docs sqlalchemy org en latest orm tutorial html以下代码作为将映射到表的类的示例 gt gt gt from sqlalchemy i
  • 如何在 Laravel 中创建两种类型的用户

    我想问一下如何在laravel中创建两种类型的用户 我有两张桌子 一张给顾客 一张给客户 我的问题是如何发挥这种作用 我是否必须制作两个不同的模型或使用模型 User 并在中间件中制作一些功能 谢谢 如果您正在寻找最简单的解决方案 您可以添
  • 另一个与Cross-XHR相关的

    我知道有很多关于 Access Control Allow Origin 不允许 的问题 错误 但我尝试过其中一些但没有成功 一些约会 我正在尝试构建一个 dev tools tab 扩展 我可以像这样触摸 flickr API这个例子 h
  • 为什么我不能运行两个 mysqli 查询?第二个失败[重复]

    这个问题在这里已经有答案了 是否可以像这样有两个 mysqli 查询 mysqli query dblink INSERT INTO images project id user id image name date created lin
  • 隐式运算符是否比 ToString() 方法具有更高的优先级? [复制]

    这个问题在这里已经有答案了 考虑以下代码 public class Test public static implicit operator int Test t return 42 public override string ToStr
  • z-index 奇怪的行为?

    给出下面的例子 function clickme console log button been clicked d1 d2 border 1px solid red z index 99 opacity 5 position relati
  • 在Python / Django环境中存储配置

    我一直想知道这个问题有一段时间了 也就是说 在使用 Python 和 或 Django 进行项目时 如何将配置与代码库隔离 特别是 这些想法受到了 Heroku 的 12 个因素之一的启发 三 配置 https www 12factor n