如何在 Django 中设置环境变量

2023-10-27

Django 是基于 Python 构建的强大 Web 框架,提供开箱即用的强大功能。它最重要但有时被忽视的功能之一是它能够使用环境变量处理配置。环境变量提供了一种在代码库之外设置配置的方法,从而提供更好的安全性和灵活性。本文旨在简化 Django 中自定义环境变量的概念,并提供一种像专业人士一样设置它们的实践方法。

为什么在 Django 中使用环境变量?

在深入研究配置之前,让我们首先了解为什么我们需要环境变量:

  • Security:在代码中对 API 密钥、数据库凭据或密钥等敏感数据进行硬编码可能会带来重大的安全风险。环境变量提供了一种将这些详细信息保留在代码库之外的方法,从而减少潜在的漏洞。
  • 灵活性:应用程序的不同阶段(开发、测试、生产)可能需要不同的配置。环境变量使您可以轻松地在这些配置之间切换,而无需更改代码。

    代码可移植性:当配置与代码分离时,可以更轻松地共享或移动代码,而不必担心敏感数据被暴露。

在 Django 中设置自定义环境变量

以下是在 Django 中设置自定义环境变量的分步指南:

1.安装python解耦:

`python 解耦`是一个很棒的包,它允许您将参数与代码分开。您可以使用 pip 安装它:

pip install python-decouple 

2. 创建.env文件:

在 Django 项目的根目录下,创建一个`.env`文件来存储特定于环境的设置。例如:


DEBUG=True
SECRET_KEY=mysecretkey
DATABASE_URL=postgres://user:password@localhost:5432/mydatabase

3.在settings.py中使用python-de Couple:

更新你的 Django`设置.py`要读取的文件`.env`文件。以下是上述变量的示例:


from decouple import config, Csv

DEBUG = config('DEBUG', default=False, cast=bool)
SECRET_KEY = config('SECRET_KEY')
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': config('DATABASE_URL').split('/')[-1],
        'USER': config('DATABASE_URL').split('//')[1].split(':')[0],
        'PASSWORD': config('DATABASE_URL').split(':')[2].split('@')[0],
        'HOST': config('DATABASE_URL').split('@')[1].split(':')[0],
        'PORT': config('DATABASE_URL').split(':')[-1],
    }
}

4.避免将 .env 提交到版本控制:

非常重要的是,您不要承诺`.env`文件进行版本控制,因为它可能包含敏感信息。添加.env给你的`.gitignore`文件以确保它不会被提交。

echo ".env" >> .gitignore 

5. 在代码中访问环境变量:

每当您想在代码中使用环境变量时,请使用解耦中的 config 函数:


from decouple import config

my_value = config('MY_ENV_VARIABLE', default='Some Default Value')

在生产中设置环境变量

在生产环境中,出于安全原因,您可能不想使用 .env 文件。相反,您可以直接在服务器上或通过托管平台的界面设置环境变量。一旦设定,`python 解耦`会自动获取它们。

确保定义了所有必需的变量

如果环境变量很关键并且应该始终定义,则在使用时不要提供默认值`配置()`。如果未设置变量,这将导致 Django 引发错误,这可以防止潜在的安全风险或错误配置。

请记住,环境变量是一种将配置与代码分离的方法,尤其是机密和凭据。始终将特定于环境的配置与代码库分开,以确保安全且可扩展的应用程序设置。

Django 中有效配置管理的技巧

  • 使用 .env 文件:为了避免每次都手动设置环境变量,可以使用`.env`文件列出所有变量,然后使用类似的库加载它们`python 解耦`.
  • 版本控制注意事项: 绝不承诺`.env`文件或任何包含版本控制敏感数据的文件。相反,提供一个`.env.example`包含虚拟数据的文件以指导其他开发人员。
  • 变量命名:为环境变量使用清晰的大写名称,以将其与常规变量区分开来。
  • 文档:始终记录项目所需的环境变量。这有助于新开发人员入职并保持设置过程透明。

结论

自定义环境变量不仅仅是 Django 中的一个安全功能;它们证明了该框架对灵活性和最佳实践的承诺。通过掌握这方面,您不仅可以使您的 Django 应用程序更加安全,还可以使其具有适应性和健壮性。快乐编码!

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

如何在 Django 中设置环境变量 的相关文章

随机推荐

  • TCP数据的传输过程

    TCP数据的传输过程 TCP Transmission Control Protocol 传输控制协议 是一种面向连接的 可靠的 基于字节流的通信协议 数据在传输前要建立连接 传输完毕后还要断开连接 客户端在收发数据前要使用 connect
  • Spark集群运行问题

    spark输出太多warning messages WARN Executor 2 block locks were not released by TID Lock release errors occur frequently in e
  • 阿里云对象存储oss费用明细

    https www aliyun com price product spm a311a 7996332 0 0 137630803P2qTh oss detail 最终决定 阿里云割韭菜 弃用选择业界其他便宜的 第二年阿里云只给你个续费
  • java操作svn--部分方法

    package com svnutil import java io File import java text DateFormat import java util ArrayList import java util Collecti
  • Fedora12 编译s3c2416 U-Boot1.3.4的Makefile和头文件

    复制Makefile到 和smdk2416 h到include configs 执行 make distclean make smdk2416 config make C Copyright 2007 2008 Jong pill Lee
  • matlab练习程序(Canny边缘检测)

    我可没直接调用系统函数 要是那样就太水了 其实我的matlab代码很容易就能翻译成c c 的 canny边缘检测一共四个部分 1 对原图像高斯平滑 2 对高斯平滑后的图像进行sobel边缘检测 这里需要求横的和竖的还有联合的 所以一共三个需
  • C语言链表——增删改查

    目录 一 链表的概念 1 1 什么是链表 二 链表和数组的区别 2 1 链表和数组的优缺点 2 1 1 数组的优缺点 2 1 2 链表的优缺点 三 链表的静态添加和动态遍历 四 统计链表节点个数及链表查找 五 链表插入 5 1 链表从指定节
  • 【程序设计训练】2-12 绩点计算

    问题描述 学校对本科生的成绩施行绩点制 GPA 将学生的实际考分根据不同学科的不同学分按一定的公式进行计算 规定如下 实际成绩 绩点 90 100 4 0 85 89 3 7 82 84 3 3 78 81 3 0 75 77 2 7 72
  • MIT教授Tegmark:GPT-4敲响警钟,百年后人类何去何从丨智源大会嘉宾风采

    导读 一封呼吁暂停大模型研究6个月的公开信让一家名为未来生命研究所 Future of Life Institute 简称 FLI 站上了风口浪尖 这家研究所的联合创始人Max Tegmark是来自麻省理工学院的物理学家和人工智能研究员 生
  • 对象存储OSS-iOS

    文章目录 对象存储OSS iOS 一 基础解读 1 相关名词 2 OSS的上传和下载 3 基于SDK快速开始 4 基于OSS的移动开发 4 1 整体流程 4 1 1 客户端申请STS凭证 4 1 2 AppServer请求AssumeRol
  • 2022华数杯B题论文思路分析+完整代码(水下机器人组装计划)(一二问答案接出来和标准答案一样)(问题三四逼近正确答案)(完整论文,代码可直接跑)

    写在前面 学校最近搞数学建模竞赛培训 以2022华数杯B题作为训练题目 在查资料过程中发现网上没有哪一篇论文解出了正确答案 而我们组利用Lingo软件准确的解出了正确答案 但是在第三问时 由于决策的变量激增 基于Lingo的模型已经无法解出
  • 五大板块(2)—— 指针

    参考 五大板块 2 指针 作者 丶PURSUING 发布时间 2021 03 18 16 01 22 网址 https blog csdn net weixin 44742824 article details 114981482 本文为学
  • TypeError: parse() got an unexpected keyword argument 'transport_encoding'

    pip install XXX 出现问题 TypeError parse got an unexpected keyword argument transport encoding 解决方法 conda install pip
  • 如何在 Git 中创建空分支(无父分支)

    Git 是一个强大的版本控制系统 使开发人员能够跟踪其代码库中的更改并有效地管理其项目 Git 的关键功能之一是分支 它允许开发人员创建代码库的单独版本并同时处理它们 在本文中 我们将了解如何使用 Git 创建空分支 orphan opti
  • 如何在 Ubuntu 18.04 上安装和配置 VNC 服务器

    VNC 代表 虚拟网络计算 是一组用于远程共享桌面系统的协议 有许多软件可用于远程访问基于 Linux 的桌面 包括 TigerVNC TightVNC Vino vnc4server 等等 TigerVNC 是一款免费 开源 高性能的 V
  • 如何在 Shell 脚本中为用户分配密码

    Command 回声 passwd stdin 例子 使用以下命令在 shell 脚本中更改用户 jack 的密码 例如我们使用字符串密码作为密码 echo password passwd stdin jack 分配用户输入密码 使用以下命
  • 如何在 Ubuntu 20.04 上安装 Google Cloud SDK

    谷歌云SDK 软件开发套件 提供了一组用于管理 Google Cloud Platform GCP 上托管的资源的工具 SDK 提供 gcloud gsutil 和 nd bq 命令 能够通过终端访问 Google Cloud Cloud
  • 如何在 Fedora 上安装 Apache Solr

    Apache Solr 是一个基于名为 Lucene 的 Java 库构建的开源搜索平台 Solr 是一个流行的网站搜索平台 因为它可以索引和搜索多个网站 并根据搜索查询的分类返回相关内容的推荐 本指南将引导您完成在 Fedora 系统上安
  • 如何在Linux中使用zip命令

    The zipLinux 中的命令是一个实用程序 用于将一组文件打包到 zip 存档中 zip 命令还可以用于压缩文件 从而减少它们在计算机硬盘上占用的空间 此外 zip命令可用于加密文件 使未经授权的用户更难以访问zip存档的内容 要解压
  • 如何在 Django 中设置环境变量

    Django 是基于 Python 构建的强大 Web 框架 提供开箱即用的强大功能 它最重要但有时被忽视的功能之一是它能够使用环境变量处理配置 环境变量提供了一种在代码库之外设置配置的方法 从而提供更好的安全性和灵活性 本文旨在简化 Dj