美文网首页《Django By Example》Java-Python-Django社区程序员
【Django】在项目中使用python-decouple将设置

【Django】在项目中使用python-decouple将设置

作者: 苍云横渡 | 来源:发表于2018-04-20 09:40 被阅读14次

原文地址:https://www.cloudcrossing.xyz/post/27/

将博客代码提交到仓库的时候,也许不经意间会将你不想泄漏的信息(比如数据库url,密码,密钥,调试状态,电子邮件主机,允许的主机等等)暴露。所以我们需要考虑,将我们的信息保存在安全的地方(比如直接保存在服务器上,而不是github)。

为了达到这个目的,我们将会用到一个模块,python-decouple,它可以将代码中的设置参数分离,保存在另外一个文件(这个文件就可以直接保存在服务器,而不提交到仓库),我们将这个文件称为环境文件

安装

执行pip install python-decouple

用法

打开settings.py,一般可以看到有如下代码:

SECRET_KEY = '3izb^ryglj(bvrjb2_y1fZvcnbky#358_l6-nn#i8fkug4mmz!'
DEBUG = True
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'HELLO_DJANGO',
        'USER': 'U_HELLO',
        'PASSWORD': 'hA8(scA@!fg3*sc&xaGh&6%-l<._&xCf',
        'HOST': '127.0.0.1',
        'PORT': '',
    }
}

首先我们在项目根目录下(即和manage.py同一目录)创建一个环境文件.env(或者.ini文件,具体参考文档),保存如下内容

SECRET_KEY=3izb^ryglj(bvrjb2_y1fZvcnbky#358_l6-nn#i8fkug4mmz!
DEBUG=True
DB_NAME=HELLO_DJANGO
DB_USER=U_HELLO
DB_PASSWORD=hA8(scA@!fg3*sc&xaGh&6%-l<._&xCf
DB_HOST=127.0.0.1

记得将.env添加到.gitignore,确保环境文件不会提交到仓库。

修改settings.py,首先导入模块

import os

#导入python-decouple模块
from decouple import config

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', cast=bool)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': config('DB_NAME'),
        'USER': config('DB_USER'),
        'PASSWORD': config('DB_PASSWORD'),
        'HOST': config('DB_HOST'),
        'PORT': '',
    }
}

传递数据

先来看两行代码

DEBUG = config('DEBUG', cast=bool)
EMAIL_PORT = config('EMAIL_PORT', cast=int)

函数config()传递两个参数,一个是传递值的变量名,一个是传递值的类型。通常来说,我们从文件读取的数据会被保存为字符串,这时候,cast参数就派上用场了。在函数config()cast参数可以指定读取的数据的类型。看回上面第一行代码,从环境文件读取到的DEBUG的值被指定为布尔值了。

对于 ALLOWED_HOSTS

ALLOWED_HOSTS=.localhost, .herokuapp.com

我们可以指定其cast参数为

ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=lambda v: [s.strip() for s in v.split(',')])

这样看起来很复杂,我们可以使用这个模块自带的Csv函数。

from decouple import config, Csv

ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv())

默认值

如果有一个值为定义在环境文件中(即在环境文件中没有这个值),我们可以向config()传递一个额外的参数来指定默认值。

DEBUG = config('DEBUG', default=True, cast=bool)

覆盖

有些时候你想不通过环境文件改变参数,你可以覆盖环境文件的变量。因为环境变量(os.environ)优先级高于环境文件变量:DEBUG=True python manage.py

注意,Decouple总是按此顺序进行赋值:

  • 环境变量;
  • 环境文件:.ini或.env文件;
  • 传递给配置的默认参数。

将环境文件上传到服务器

这里我们主要用到xshell,lrzsz。首先用xshell连接到服务器(具体百度下就知道了)。

然后执行命令yum install -y lrzsz进行lrzsz的安装,接着执行sudo rz命令本地上传文件到服务器,在弹出的文件选择框选择我们的环境文件即可。

如果需要下载服务器的文件,执行sz filename

参考链接:
How to Use Python Decouple

相关文章

  • 【Django】在项目中使用python-decouple将设置

    原文地址:https://www.cloudcrossing.xyz/post/27/ 将博客代码提交到仓库的时候...

  • Django Views和URLconf

    在前一章中,我解释了如何设置一个Django项目并运行Django开发服务器。 在本章中,您将学习使用Django...

  • 在Eclipse中创建Django项目

      在以前的分享中,我们是在命令行模式下创建Django项目的,那么,如何在IDE中使用Django呢?  本文将...

  • Django 使用Template

    新建项目Django项目,并建立APP 1.在setting 中设置template 2.在Template 文件...

  • Django 创建第一个项目

    Django 创建第一个项目 本章我们将介绍Django 管理工具及如何使用 Django 来创建项目,第一个项目...

  • 数据库配置

    在settings.py文件,包含了Django项目设置的python模块。通常,这个配置文件使用 SQLite ...

  • 在django下使用mysql(1)

    1、使用终端命令启动mysql 2、在MySql中创建Django项目的数据库 3、在MySql中为Django项...

  • Django初见

    在python环境下 安装Django:pip install django 在终端: 使用Django创建项目:...

  • django DEBUG=False

    在django的settings中. 将DEBUG 设置为False. 会出现 #python manage.py...

  • Django 创建第一个项目

    本章我们将介绍Django 管理工具及如何使用 Django 来创建项目,第一个项目我们以 HelloWorld ...

网友评论

    本文标题:【Django】在项目中使用python-decouple将设置

    本文链接:https://www.haomeiwen.com/subject/vspbkftx.html