• Django中一种常见的setting与账密保存/读取方式


    前言

    在查看别人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 也可增加部分可维护性

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

  • 相关阅读:
    hao947 : Mybatis resultMap配置插入和主键自增返回 : 好947
    VelocityTracker简单介绍
    Java中StringBuilder的清空方法比較
    jquery中的动画
    数据库索引的作用和长处缺点
    很具体GC学习笔记
    深入理解 JBoss 7/WildFly Standalone 模式启动过程
    curl命令具体解释
    【免费】iPhone上最好用的短信群发软件: 高速短信4.1
    Project interpreter not specified(eclipse+pydev)
  • 原文地址:https://www.cnblogs.com/chnmig/p/11654621.html
Copyright © 2020-2023  润新知