Đây là phương pháp chúng tôi sử dụng:
- một
settings
mô-đun để chia cài đặt thành nhiều tệp để dễ đọc;
- một
.env.json
tệp để lưu trữ thông tin xác thực và tham số mà chúng tôi muốn loại trừ khỏi kho lưu trữ git của chúng tôi hoặc dành riêng cho môi trường;
- một
env.py
tệp để đọc .env.json
tệp
Xem xét cấu trúc sau:
...
.env.json # the file containing all specific credentials and parameters
.gitignore # the .gitignore file to exclude `.env.json`
project_name/ # project dir (the one which django-admin.py creates)
accounts/ # project's apps
__init__.py
...
...
env.py # the file to load credentials
settings/
__init__.py # main settings file
database.py # database conf
storage.py # storage conf
...
venv # virtualenv
...
Với .env.json
như:
{
"debug": false,
"allowed_hosts": ["mydomain.com"],
"django_secret_key": "my_very_long_secret_key",
"db_password": "my_db_password",
"db_name": "my_db_name",
"db_user": "my_db_user",
"db_host": "my_db_host",
}
Và project_name/env.py
:
<!-- language: lang-python -->
import json
import os
def get_credentials():
env_file_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
with open(os.path.join(env_file_dir, '.env.json'), 'r') as f:
creds = json.loads(f.read())
return creds
credentials = get_credentials()
Chúng tôi có thể có các cài đặt sau:
<!-- language: lang-py -->
# project_name/settings/__init__.py
from project_name.env import credentials
from project_name.settings.database import *
from project_name.settings.storage import *
...
SECRET_KEY = credentials.get('django_secret_key')
DEBUG = credentials.get('debug')
ALLOWED_HOSTS = credentials.get('allowed_hosts', [])
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
...
]
if DEBUG:
INSTALLED_APPS += ['debug_toolbar']
...
# project_name/settings/database.py
from project_name.env import credentials
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': credentials.get('db_name', ''),
'USER': credentials.get('db_user', ''),
'HOST': credentials.get('db_host', ''),
'PASSWORD': credentials.get('db_password', ''),
'PORT': '5432',
}
}
lợi ích của giải pháp này là:
- thông tin đăng nhập và cấu hình cụ thể của người dùng để phát triển cục bộ mà không cần sửa đổi kho lưu trữ git;
- cấu hình môi trường cụ thể , bạn có thể có ví dụ ba môi trường khác nhau với ba môi trường khác nhau
.env.json
như dev, trì trệ và sản xuất;
- thông tin đăng nhập không có trong kho lưu trữ
Tôi hy vọng điều này sẽ giúp, chỉ cho tôi biết nếu bạn thấy bất kỳ cảnh báo nào với giải pháp này.