前言

在查看别人Django代码的时候,发现很多的manager文件都是类似于

#!/usr/bin/env python
import os
import sys if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'conf.development.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)

这种的

然后部署时又需要先设置环境变量,看配置文件有.env又有setting.py,这是怎么回事呢?

正文

就以我们之前的某个项目为例,同事写的就是这样的结构.

在 conf 文件夹下的 production文件夹 中有着 settings.py 存放 django 的一些设置,同级目录下还有 .env 文件存放一些账密

那么在请求进入的时候,django是怎样获取这些配置的呢?

我们来从请求进入说起

supervisor托管时会先将整体的settings写入当前shell的环境变量(已下为supervisor配置节选)

environment=DJANGO_SETTINGS_MODULE=conf.production.settings

此时该进程中有环境变量 DJANGO_SETTINGS_MODULE 为 conf.production.settings

然后django按照环境变量去寻找该文件,解析settings.py

我们来看 settings.py 的部分代码

在开头部分,引用了os和dotenv模块

dovent模块可以将.env文件按每行 k=v 的格式解析出相应的键值对存入环境变量中,代码注释后为

# 拼接路径为当前绝对路径下的.env文件
dotenv_path = join(dirname(__file__), '.env')
# load_dovent作用解析.env文件的配置项写入环境变量
load_dotenv(dotenv_path)

.env文件节选内容为

然后我们发现. settings.py中有些账密的配置是存储在.env中, 启动时通过环境变量写入, 而在settings中引入则为

使用 os.environ.get 按照key读取环境变量的值,

而一些不太重要的或者不变的(比如Django时区什么的),就明文写在了settings.py中直接读取

好处

显而易见的,将账密单独存储至 .env 文件可增加部分安全性,将经常改变的配置项写在 .env 也可增加部分可维护性

但是对于之前没有做过类似模式的同学来说可能较难懂,这也是本篇博文的目的所在.希望对你有所帮助.

Django中一种常见的setting与账密保存/读取方式的更多相关文章

  1. JS中几种常见的数组算法(前端面试必看)

    JS中几种常见的数组算法 1.将稀疏数组变成不稀疏数组 /** * 稀疏数组 变为 不稀疏数组 * @params array arr 稀疏数组 * @return array 不稀疏的数组 */ f ...

  2. Spring RestTemplate中几种常见的请求方式

    https://github.com/lenve/SimpleSpringCloud/tree/master/RestTemplate在Spring Cloud中服务的发现与消费一文中,当我们从服务消 ...

  3. 自然语言处理的CNN模型中几种常见的池化方法

    自然语言处理的CNN模型中几种常见的池化方法 本文是在[1]的基础上进行的二次归纳. 0x00 池化(pooling)的作用   首先,回顾一下NLP中基本的CNN模型的卷积和池化的大致原理[2].f ...

  4. Spring RestTemplate中几种常见的请求方式GET请求 POST请求 PUT请求 DELETE请求

    Spring RestTemplate中几种常见的请求方式 原文地址: https://blog.csdn.net/u012702547/article/details/77917939   版权声明 ...

  5. JavaScript 中 4 种常见的内存泄露陷阱

    了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读一读吧 ...

  6. 比较C#中几种常见的复制字节数组方法的效率

    在日常编程过程中,我们可能经常需要Copy各种数组,一般来说有以下几种常见的方法:Array.Copy,IList<T>.Copy,BinaryReader.ReadBytes,Buffe ...

  7. 比较C#中几种常见的复制字节数组方法的效率[转]

    [原文链接] 在日常编程过程中,我们可能经常需要Copy各种数组,一般来说有以下几种常见的方法:Array.Copy,IList<T>.Copy,BinaryReader.ReadByte ...

  8. Java中9种常见的CMS GC问题分析与解决

    1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...

  9. java中几种常见字符集与乱码介绍

    1.  ASCII和Ansi编码 字符内码(charcter code)指的是用来代表字符的内码 .读者在输入和存储文档时都要使用内码,内码分为  单字节内码 -- Single-Byte chara ...

随机推荐

  1. Java集合源码分析(六)——ConcurrentHashMap

    目录 简介 源码分析 父类 接口 字段 内部类 1.链表节点结构 2.树根结构 3.树节点结构 方法 1.构造方法 2.基本并发方法 3.初始化表数组的操作 4.修改添加元素 5.统计元素数量 6.扩 ...

  2. 五、git学习之——分支管理策略、Bug分支、feature分支、多人协作

    一.分支管理策略 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生 ...

  3. .NET5下的三维应用程序开发

    终于等到了.NET5的发布,怀着激动的心情体验了一下:"香"就一个字. 如何基于.NET5开发工业软件,也广大三维应用开发者关心的问题.我们的Rapid SDK已经率先支持.NET ...

  4. ⑥SpringCloud 实战:引入gateway组件,开启网关路由功能

    这是SpringCloud实战系列中第4篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

  5. java web简单的对数据库存数据

    1.建立一个表,分别有Coursename,teachername,Place,Id;这些数据跟sql语句中的相对应 2.在src包目录下创建这些类 3.在WebContent目录下创建jsp,Mai ...

  6. idea的下载与安装

    1.下载idea.到idea的官网选择你需要下载的,你最喜欢的版本https://www.jetbrains.com/idea/download/ 2.下载jdk.进入Oracle官网,鼠标指在Dow ...

  7. 【PY从0到1】第一节 安装与界面介绍

    本系列是介绍如何用Python进行股票量化交易的课程. 课程内容以记录Python零基础学员从最简单的Python下载及安装开始,到最后能熟练运用Python进行量化交易的专业人员的成长历程.旨在打造 ...

  8. Python高级语法-贯彻回顾-元类(4.99.1)

    @ 目录 1.为什么要掌握元类 2.正文 关于作者 1.为什么要掌握元类 在django中编写models的时候遇到了元类的相关操作 并且在mini-web框架编写的时候也遇到了相关的问题 意识到深入 ...

  9. matlab随机系数矩阵产生以及矩阵的可视化函数

    clc; clear all; close all; n = 100;%所产生矩阵的大小 A= sprandsym(n,0.015,0.1,1);%产生系数矩阵函数: spy(A)矩阵图形化相当于im ...

  10. .Net Core使用IdentityServer4

    官方文档https://identityserver4.readthedocs.io/en/latest/ 参考https://www.cnblogs.com/i3yuan/p/13843082.ht ...