Django 項目通過加載不同env文件來區(qū)分不同環(huán)境
簡述
本文主要是整理如何在 django 項目中解決不同環(huán)境下加載不同 .env 環(huán)境配置文件的方案。主要內(nèi)容包含 django-environ 的安裝使用,以及 django-crontab 腳本環(huán)境下的配置使用。
django-environ 的使用
安裝
pip install django-environ
使用
創(chuàng)建 .env文件
# 項目目錄中 touch .env # 增加環(huán)境變量 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為內(nèi)網(wǎng)環(huán)境,故而 .env 不需要加入 .gitignore ,實現(xiàn)文件忽略上傳。
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') }
如何實現(xiàn)不同環(huán)境下加載不同環(huán)境變量
在只使用一個 settings.py 文件情況下,可以只使用一個環(huán)境變量,通過此環(huán)境變量來讀取不同環(huán)境的 .env 文件以區(qū)分不同環(huán)境。 這個環(huán)境變量就沒法寫在 .env 文件了,必須手動指定。假設我們這個環(huán)境變量叫PROJECT_ENV。那么我們在命令行執(zhí)行任何命令的時候,在前面加上PROJECT_ENV=xxx來指定環(huán)境變量。 當然,也可以export來指定這個環(huán)境變量,也可以修改shell配置文件來指定這個環(huán)境變量,甚至supervisord和uwsgi的配置文件也可以指定環(huán)境變量。
執(zhí)行方法
PROJECT_ENV=local python manage.py runserver
多環(huán)境.env文件設置
假設目前存在 local 以及 product 兩種環(huán)境,則在 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) ) """ 通過指定環(huán)境遍歷加載不同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 腳本環(huán)境下加載不同配置
django-crontab 的使用可以參考django-crontab實現(xiàn)服務端的定時任務
代碼調(diào)整
在 settings.py 文件中,django-crontab 配置任務 CRONJOBS 下增加 CRONTAB_COMMAND_PREFIX =
'PROJECT_ENV=' + env_name 參數(shù)指定 CRONJOBS = [ ("*/5 * * * *", "analysis.cron.test_cron", ">>" + LOG_DIR + "log/fba_claim_shipment.log"), ] CRONTAB_COMMAND_PREFIX = 'PROJECT_ENV=' + env_name
執(zhí)行方法
PROJECT_ENV=local python manage.py crontab add
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python調(diào)用高德API實現(xiàn)批量地址轉(zhuǎn)經(jīng)緯度并寫入表格的功能
這篇文章主要介紹了Python調(diào)用高德API實現(xiàn)批量地址轉(zhuǎn)經(jīng)緯度并寫入表格的功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01tensorflow下的圖片標準化函數(shù)per_image_standardization用法
這篇文章主要介紹了tensorflow下的圖片標準化函數(shù)per_image_standardization用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python獲得文件創(chuàng)建時間和修改時間的方法
這篇文章主要介紹了python獲得文件創(chuàng)建時間和修改時間的方法,涉及Python針對文件屬性的相關操作技巧,需要的朋友可以參考下2015-06-06利用插件和python實現(xiàn)Excel轉(zhuǎn)json的兩種辦法
轉(zhuǎn)換Excel表格到JSON格式有很多方法,下面這篇文章主要給大家介紹了關于利用插件和python實現(xiàn)Excel轉(zhuǎn)json的兩種辦法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-11-11python-str,list,set間的轉(zhuǎn)換實例
今天小編就為大家分享一篇python-str,list,set間的轉(zhuǎn)換實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06Python中判斷語句入門指南(if?elif?else語句)
if elif else語句是Python中的控制語句,用于根據(jù)條件執(zhí)行不同的操作,下面這篇文章主要給大家介紹了關于Python中判斷語句入門指南(if?elif?else語句)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-05-05Django+zTree構(gòu)建組織架構(gòu)樹的方法
zTree是一個開源的依靠JQuery實現(xiàn)的多功能樹插件,具有性能優(yōu)異、配置靈活、功能強大的特點,這篇文章主要介紹了Django+zTree構(gòu)建組織架構(gòu)樹,需要的朋友可以參考下2019-08-08