在 Python 开发中,.env 文件通常用于存储环境变量,例如数据库配置、API 密钥、调试模式等。这样可以避免将敏感信息直接写在代码中,提高安全性和可维护性。下面是如何创建和使用 .env 文件的详细步骤。

1. 安装 python-decouple

python-decouple 是一个常用的库,用于加载 .env 文件中的环境变量。首先,确保你已经安装了 python-decouple

pip install python-decouple

2. 创建 .env 文件

在你的项目根目录下创建一个 .env 文件。文件名是 .env,没有前缀。这个文件用于存储你的环境变量。

示例 .env 文件
# .env 文件示例

# Django secret key
SECRET_KEY=django-insecure-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# Debug 模式
DEBUG=True

# 数据库配置
DB_NAME=mydatabase
DB_USER=mydatabaseuser
DB_PASSWORD=mypassword
DB_HOST=localhost
DB_PORT=3306

# 其他配置
API_KEY=your_api_key_here

3. 修改 settings.py 文件

在 Django 项目的 settings.py 文件中,使用 python-decouple 来加载 .env 文件中的变量。

示例 settings.py 文件
from pathlib import Path
from decouple import config, Csv

# 项目基础路径
BASE_DIR = Path(__file__).resolve().parent.parent

# 安全密钥
SECRET_KEY = config('SECRET_KEY', default='django-insecure-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')

# 调试模式
DEBUG = config('DEBUG', default=False, cast=bool)

# 允许的主机
ALLOWED_HOSTS = config('ALLOWED_HOSTS', default='', cast=Csv())

# 已安装的应用程序
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',  # 你的应用
]

# 中间件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# 根 URL 配置
ROOT_URLCONF = 'myproject.urls'

# 模板配置
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'myproject.wsgi.application'

# 数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': config('DB_NAME'),
        'USER': config('DB_USER'),
        'PASSWORD': config('DB_PASSWORD'),
        'HOST': config('DB_HOST'),
        'PORT': config('DB_PORT', cast=int),
    }
}

# 密码验证器
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

# 国际化
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

# 静态文件 (CSS, JavaScript, Images)
STATIC_URL = '/static/'

# 默认的主键字段类型
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

4. 使用环境变量

你可以在项目中的其他地方使用 config 函数来加载环境变量。例如,加载 API 密钥:

import requests
from decouple import config

API_KEY = config('API_KEY')

response = requests.get('https://api.example.com/data', headers={'Authorization': f'Bearer {API_KEY}'})

5. .gitignore 文件中忽略 .env

为了确保你的 .env 文件不会被提交到版本控制系统(如 Git),请在你的 .gitignore 文件中添加 .env

.gitignore 文件示例
# 忽略 .env 文件
.env

总结

通过这些步骤,你可以创建并使用 .env 文件来管理你的 Django 项目中的环境变量。使用 .env 文件可以提高安全性和灵活性,并且在不同的环境(如开发、测试、生产)中更容易管理配置。