Darslik · 2026-08-14 · ~2 daqiqa o‘qiladi · boshlang'ich
Django sozlamalarini .env bilan boshqarish: to‘g‘ri yo‘l
Django loyihalarida eng ko‘p uchraydigan xatolardan biri — settings.py ichida
maxfiy qiymatlarning ochiq turishi: SECRET_KEY, ma'lumotlar bazasi paroli,
API kalitlar. Bu kod git'ga tushadi, git esa ertami-kechmi GitHub'ga chiqadi —
va parolingiz tarixda abadiy qoladi.
To‘g‘ri yondashuv: konfiguratsiya kodda emas, muhitda yashaydi (The Twelve-Factor
App'ning 3-printsipi). Django'da buni django-environ bilan qilamiz.
O‘rnatish#
uv add django-environ
Loyiha ildizida .env fayl (va uni albatta .gitignore'ga qo‘shing):
SECRET_KEY=juda-maxfiy-kalit
DATABASE_URL=postgres://app:app@localhost:5432/app
ALLOWED_HOSTS=example.uz,www.example.uz
Jamoa uchun esa .env.example — qiymatlarsiz shablon — git'da qoladi.
settings.py'da o‘qish#
import environ
env = environ.Env()
environ.Env.read_env(BASE_DIR / ".env")
SECRET_KEY = env("SECRET_KEY")
DEBUG = env.bool("DEBUG", default=False)
ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", default=[])
DATABASES = {"default": env.db("DATABASE_URL")}
E'tibor bering: SECRET_KEYda default yo‘q — u topilmasa loyiha yiqilishi kerak.
Maxfiy qiymat uchun jimgina default ishlatish — kelajakdagi incident.
Settings'ni bo‘lish#
Bitta settings.py o‘rniga uchta fayl:
config/settings/
├── base.py # umumiy sozlamalar
├── dev.py # DEBUG=True, dev qulayliklari
└── prod.py # xavfsizlik: HSTS, secure cookies, SSL redirect
dev.py va prod.py — from .base import * bilan boshlanadi va faqat farqni
yozadi. Qaysi biri ishlashini DJANGO_SETTINGS_MODULE muhit o‘zgaruvchisi hal
qiladi: lokalda config.settings.dev, serverda config.settings.prod.
Nega bu xavfsizlik masalasi#
.envgit'da yo‘q — parollar tarixga tushmaydi- Prod sozlamalari (HSTS,
SECURE_SSL_REDIRECT, secure cookies) alohida faylda — dev qulayligi uchun ularni "vaqtincha o‘chirish" vasvasasi yo‘qoladi - Kalit almashtirish deploy'siz:
.envyangilanadi, servis restart bo‘ladi
Oddiy ko‘ringan bu tartib — loyihangiz o‘sganda eng arzon sug‘urta.