Django 项目通过加载不同env文件来区分不同环境

 更新时间:2020年02月17日 08:31:36   作者:studytime  
这篇文章主要介绍了Django 项目如何通过加载不同env文件来区分不同环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

简述

本文主要是整理如何在 django 项目中解决不同环境下加载不同 .env 环境配置文件的方案。主要内容包含 django-environ 的安装使用,以及 django-crontab 脚本环境下的配置使用。

django-environ 的使用

安装

官方 django-environ github链接地址

pip install django-environ

使用

创建 .env文件

# 项目目录中
touch .env

# 增加环境变量
DEBUG=True
SECRET_KEY=your-secret-key
DATABASE_URL=psql://urser:un-githubbedpassword@127.0.0.1:8458/database
SQLITE_URL=sqlite:///my-local-sqlite.db
CACHE_URL=memcache://127.0.0.1:11211,127.0.0.1:11212,127.0.0.1:11213
REDIS_URL=rediscache://127.0.0.1:6379/1?client_class=django_redis.client.DefaultClient&password=ungithubbed-secret

与 settings.py 一起使用。为了方便使用目前使用gitlab为内网环境,故而 .env 不需要加入 .gitignore ,实现文件忽略上传。

import environ

# initialize env
env = environ.Env(
 # set casting, default value
 DEBUG=(bool, False)
)
# reading .env file
environ.Env.read_env()

# False if not in os.environ
DEBUG = env('DEBUG')

# Raises django's ImproperlyConfigured exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')

# Parse database connection url strings like psql://user:pass@127.0.0.1:8458/db
DATABASES = {
 # read os.environ['DATABASE_URL'] and raises ImproperlyConfigured exception if not found
 'default': env.db(),
 # read os.environ['SQLITE_URL']
 'extra': env.db('SQLITE_URL', default='sqlite:////tmp/my-tmp-sqlite.db')
}

CACHES = {
 # read os.environ['CACHE_URL'] and raises ImproperlyConfigured exception if not found
 'default': env.cache(),
 # read os.environ['REDIS_URL']
 'redis': env.cache('REDIS_URL')
}

如何实现不同环境下加载不同环境变量

在只使用一个 settings.py 文件情况下,可以只使用一个环境变量,通过此环境变量来读取不同环境的 .env 文件以区分不同环境。 这个环境变量就没法写在 .env 文件了,必须手动指定。假设我们这个环境变量叫PROJECT_ENV。那么我们在命令行执行任何命令的时候,在前面加上PROJECT_ENV=xxx来指定环境变量。 当然,也可以export来指定这个环境变量,也可以修改shell配置文件来指定这个环境变量,甚至supervisord和uwsgi的配置文件也可以指定环境变量。

执行方法

PROJECT_ENV=local python manage.py runserver

多环境.env文件设置

假设目前存在 local 以及 product 两种环境,则在 envs 下新建 .env.local 以及 .env.product 文件。

settings.py 代码兼容

import os
import environ
import logging.config

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

env = environ.Env(
 # set casting, default value
 DEBUG=(bool, False)
)

"""
通过指定环境遍历加载不同env文件
PROJECT_ENV=production python manage.py crontab add
默认场景下可不指定,则加载local文件
"""
env_name = env.str('PROJECT_ENV', 'local')
# reading .env file
env.read_env('envs/.env.%s' % env_name)

如何在 django-crontab 脚本环境下加载不同配置

django-crontab 的使用可以参考django-crontab实现服务端的定时任务

代码调整

在 settings.py 文件中,django-crontab 配置任务 CRONJOBS 下增加 CRONTAB_COMMAND_PREFIX =

'PROJECT_ENV=' + env_name 参数指定

CRONJOBS = [
 ("*/5 * * * *", "analysis.cron.test_cron", ">>" + LOG_DIR + "log/fba_claim_shipment.log"),
]

CRONTAB_COMMAND_PREFIX = 'PROJECT_ENV=' + env_name

执行方法

PROJECT_ENV=local python manage.py crontab add

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

相关文章

  • 用python写个博客迁移工具

    用python写个博客迁移工具

    这篇文章主要介绍了如何用python写个博客迁移工具,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • keras中的History对象用法

    keras中的History对象用法

    这篇文章主要介绍了keras中的History对象用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • matplotlib bar()实现百分比堆积柱状图

    matplotlib bar()实现百分比堆积柱状图

    这篇文章主要介绍了matplotlib bar()实现百分比堆积柱状图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 小白如何入门Python? 制作一个网站为例

    小白如何入门Python? 制作一个网站为例

    以制作一个网站为例,聊一聊小白如何入门Python,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python&MongoDB爬取图书馆借阅记录

    python&MongoDB爬取图书馆借阅记录

    这篇文章主要介绍了python&MongoDB爬取图书馆借阅记录的相关资料,需要的朋友可以参考下
    2016-02-02
  • Python如何读取json文件

    Python如何读取json文件

    这篇文章主要介绍了Python如何读取json文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • pytorch 实现删除tensor中的指定行列

    pytorch 实现删除tensor中的指定行列

    今天小编就为大家分享一篇pytorch 实现删除tensor中的指定行列,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python保存dict字典类型数据到Mysql并自动创建表与列

    Python保存dict字典类型数据到Mysql并自动创建表与列

    这篇文章主要介绍了Python保存dict字典类型数据到Mysql并自动创建表与列,字典是另一种可变容器模型,且可存储任意类型对象,想了解更多内容的小伙伴可以和小编一起进入下面文章学习更多内容,希望对你有所帮助
    2022-02-02
  • 浅谈tensorflow之内存暴涨问题

    浅谈tensorflow之内存暴涨问题

    今天小编就为大家分享一篇浅谈tensorflow之内存暴涨问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • PyQt5实现下载进度条效果

    PyQt5实现下载进度条效果

    这篇文章主要为大家详细介绍了PyQt5实现下载进度条效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04

最新评论