Django-environ 入门教程

Django-environ 入门教程

Django-environ 是一个帮助 Django 项目管理环境变量的库,它可以简化 .env

文件的管理,并集中处理敏感配置如数据库连接、API 密钥等。

安装

首先安装 django-environ:

复制代码
pip install django-environ

基本配置

1. 创建 .env 文件

在 Django 项目的根目录(manage.py 同级)创建 .env 文件:

复制代码
DEBUG=on
SECRET_KEY=your-secret-key
DATABASE_URL=psql://user:password@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=secret
2. 修改 settings.py

在 Django 的 settings.py 文件中进行以下修改:

复制代码
import environ

# 初始化 environ
env = environ.Env()

# 从 .env 文件读取环境变量
environ.Env.read_env()

# 使用环境变量
SECRET_KEY = env('SECRET_KEY')
DEBUG = env('DEBUG')

# 数据库配置
DATABASES = {
    'default': env.db(),
    'extra': env.db('SQLITE_URL', default='sqlite:////tmp/my-tmp-sqlite.db'),
}

# 缓存配置
CACHES = {
    'default': env.cache(),
    'redis': env.cache('REDIS_URL'),
}

高级用法

类型转换

django-environ 会自动转换类型:

复制代码
DEBUG = env.bool('DEBUG', default=False)  # 转换为布尔值
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=['localhost'])  # 转换为列表
PORT = env.int('PORT', default=8000)  # 转换为整数
默认值和必填项
复制代码
# 如果没有设置会抛出异常
REQUIRED_SETTING = env('REQUIRED_SETTING')

# 使用默认值
OPTIONAL_SETTING = env('OPTIONAL_SETTING', default='default_value')
使用 .env 以外的文件
复制代码
在这里插入代码片
env = environ.Env()
environ.Env.read_env('/path/to/other/.env')  # 指定其他路径的 .env 文件
在模板中使用环境变量
复制代码
# settings.py
TEMPLATES = [
    {
        # ...
        'OPTIONS': {
            'context_processors': [
                # ...
                'django.template.context_processors.request',
                'yourapp.context_processors.expose_env',
            ],
        },
    },
]

# yourapp/context_processors.py
from django.conf import settings

def expose_env(request):
    return {
        'ENV_DEBUG': settings.DEBUG,
        'ENV_VERSION': settings.VERSION,
    }
相关推荐
java1234_小锋几秒前
【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章评论量分析实现
python·自然语言处理·flask
一块plus8 分钟前
1,000 万 DOT 奖励,JAM Prize 邀你共建 Polkadot 下一代基础设施!
javascript·后端·github
爱吃芒果的蘑菇10 分钟前
Python读取获取波形图波谷/波峰
python·算法
Clay26 分钟前
nestjs实战 - buildadmin重构后端(初始化mock接口)
javascript·后端
巴厘猫27 分钟前
Java开发者新机遇:LangChain4j——在Java中构建LLM应用的利器
java·后端·langchain
科米米29 分钟前
demo01 ffmpeg 从usb uvc摄像头读取一张图片
后端
loop lee32 分钟前
【Spring】一文了解SpringMVC的核心功能及工作流程,以及核心组件及注解
java·后端·spring
巴厘猫34 分钟前
从零解锁Docker API,玩转容器的“幕后英雄”!
后端·docker·容器
Resean022335 分钟前
SpringMVC 6+源码分析(一)初始化流程
java·后端·spring·servlet·springmvc
MacroZheng1 小时前
扔掉HttpUtil!看看人家的HTTP客户端工具,那叫一个优雅!
java·spring boot·后端