Jak opravit chybu Django „ImproperlyConfigured: The SECRET_KEY Setting Must Not Be Empty“

Pokud Django vyvolá chybu django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty, je okamžitý problém jednoduchý: modul nastavení, který Django načtl, neposkytuje v době běhu použitelnou hodnotu SECRET_KEY. Opravte hodnotu v modulu nastavení, který se skutečně používá, nebo se ujistěte, že proměnná prostředí, která ji poskytuje, dosáhne do procesu Django. Neřešte selhání v produkčním prostředí trvalým uložením tajného klíče do systému správy verzí.

Tato příručka byla ověřena oproti dokumentaci Django 6.1. Django 6.1 bylo vydáno 5. srpna 2026. Základní pravidlo je explicitní: SECRET_KEY má výchozí hodnotu prázdný řetězec, musí být unikátní a nepředvídatelný a Django odmítne spustit, pokud není nastaven. Podívejte se na oficiální referenci nastavení SECRET_KEY v Django.

Ilustrace terminálu vygenerovaná AI, která zobrazuje chybu Django SECRET_KEY setting must not be empty
Ilustrace vygenerovaná AI: reprezentativní traceback Django pro prázdný SECRET_KEY. Nejedná se o snímek obrazovky z testovaného projektu.

Co vlastně znamená „SECRET_KEY setting must not be empty“?

Znamená to, že když se Django pokusilo použít settings.SECRET_KEY, vyhodnocená hodnota byla prázdná nebo jinak chyběla. U nově vytvořeného projektu příkaz django-admin startproject obvykle zapíše vygenerovaný klíč do souboru settings.py. Tato chyba je proto obzvláště častá poté, co byl projekt reorganizován pro více prostředí, přesunut na proměnné prostředí, nasazen na novou službu nebo spuštěn s jiným modulem nastavení.

První užitečná otázka není „Jak vymyslím libovolný řetězec, aby server naběhl?“. Je to „Odkud má toto nasazení získat svůj tajný klíč?“. Tento rozdíl je důležitý, protože existující produkční aplikace by měla obvykle obnovit svůj zamýšlený tajný klíč, nikoli tiše generovat jiný při každém spuštění.

Běžné vzory kódu, které způsobují tuto chybu

SECRET_KEY = ""

# Chybějící proměnná prostředí vrátí None
SECRET_KEY = os.getenv("SECRET_KEY")

# Chybějící proměnná prostředí tiše použije výchozí prázdný řetězec
SECRET_KEY = os.getenv("SECRET_KEY", "")

Všechny tři varianty nechají Django bez použitelného tajného klíče, pokud externí hodnota chybí. Pro produkční konfiguraci demonstruje vlastní kontrolní seznam nasazení Django formu fail-fast:

import os

SECRET_KEY = os.environ["SECRET_KEY"]

Při tomto vzoru chybějící proměnná prostředí procesu selže okamžitě, místo aby se tiše stala prázdnou hodnotou. Oficiální kontrolní seznam nasazení Django také uvádí, že produkční klíč by měl být velká náhodná hodnota, udržovaná v tajnosti, znovu nepoužívaná jinde a neukládaná do systému správy verzí.

Ilustrace editoru kódu vygenerovaná AI, kde production.py čte SECRET_KEY z os.environ
Ilustrace vygenerovaná AI: produkční nastavení čtou SECRET_KEY z prostředí procesu. To odpovídá zdokumentovanému vzoru proměnných prostředí v Django; obrazovka je ilustrativní, nejde o skutečný snímek projektu.

Který soubor nastavení Django skutečně načítá?

Před úpravou souboru potvrďte, že jde o soubor, který používá váš příkaz nebo aplikační server. Django vybírá modul nastavení prostřednictvím DJANGO_SETTINGS_MODULE, což je cesta Pythonu, jako je mysite.settings nebo config.settings.production. Oficiální průvodce nastavením Django dokumentuje tento mechanismus a volitelný parametr příkazového řádku --settings.

Například změna config/settings.py nepomůže, pokud služba spouští Django s:

python manage.py runserver --settings=config.settings.local
>Stejně tak může produkční vstupní bod WSGI nebo ASGI nastavit jiný modul. Zkontrolujte manage.py, wsgi.py, asgi.py a skutečný příkaz serveru nebo konfiguraci služby. Pokud záměrně používáte produkční modul nastavení, testujte explicitně tento stejný modul, místo abyste testovali vývojový soubor a předpokládali, že výsledek platí i pro produkci.
Ilustrace VS Code vygenerovaná AI, kde je v multi-environment projektu Django vybrán config settings production.py
Ilustrace vygenerovaná AI: projekt se samostatnými základními, vývojovými a produkčními nastaveními. Přesné rozložení souborů je specifické pro projekt; ověřte modul, který vaše nasazení skutečně vybírá.
Ilustrace editoru kódu vygenerovaná AI, která ukazuje SECRET_KEY přiřazený prázdnému řetězci v settings.py
Ilustrace vygenerovaná AI: prázdný SECRET_KEY v settings.py. Pohled editoru je ilustrativní, nejde o důkaz ze skutečného repozitáře.

Měli byste vygenerovat nový SECRET_KEY, nebo obnovit starý?

Pro zcela nový lokální projekt: vygenerování nové bezpečné hodnoty je rozumné. Standardní modul Pythonu secrets je navržen pro kryptograficky silnou náhodnost. Jeden přenosný příkaz je:

python -c "import secrets; print(secrets.token_urlsafe(64))"

Dokumentace Pythonu popisuje secrets jako modul pro generování bezpečných náhodných hodnot vhodných pro hesla, autentizační tokeny a související tajné údaje. Podívejte se na oficiální dokumentaci Pythonu secrets.

Pro existující produkční aplikaci, která dříve fungovala: nejprve se pokuste obnovit stejný zamýšlený tajný klíč z vašeho úložiště tajných údajů nebo konfigurace nasazení. Django používá SECRET_KEY pro kryptografické podepisování a pro několik funkcí, včetně určitých konfigurací relací a zpráv a tokenů pro resetování hesla. Neočekávaná výměna klíče může zneplatnit podepsaná data. Pokud starý klíč nebyl kompromitován a výpadek je pouze chybou v injektáži prostředí, jeho obnovení obvykle zamezí zbytečné rotaci.

Pokud byl starý klíč odhalen: proveďte jeho rotaci. Django 6.1 podporuje SECRET_KEY_FALLBACKS pro plánovanou rotaci, což umožňuje dočasně přijímat staré klíče, zatímco nové podepisování používá nový klíč. Odstraňte záložní klíče, jakmile skončí jejich přechodné období. Chování a kompromisy jsou zdokumentovány v oficiální referenci SECRET_KEY_FALLBACKS.

Jaká je nejrychlejší bezpečná oprava pro lokální vývoj?

Pokud se pouze snažíte spustit jednorázový lokální projekt, můžete vložit vygenerovanou hodnotu pouze pro vývoj do aktivního souboru nastavení dostatečně dlouho na potvrzení diagnózy:

SECRET_KEY = "nahraďte-toto-nahodnou-hodnotou-pouze-pro-vyvoj"

Poté znovu spusťte Django. Pokud chyba zmizí, potvrdili jste, že blokátor bylo prázdné nastavení. Nekopírujte produkční tajný klíč na vývojářský notebook jen pro pohodlné nastavení lokálního prostředí a nepovažujte pevně zakódovanou vývojovou hodnotu za svůj produkční návrh.

Ilustrace editoru kódu vygenerovaná AI, která ukazuje neprázdný SECRET_KEY v settings.py pro lokální řešení problémů
Ilustrace vygenerovaná AI: neprázdný pevně zakódovaný klíč použitý pouze k demonstraci lokální diagnostiky. Produkční tajné klíče by neměly být ukládány do systému správy verzí.

Dosahuje proměnná prostředí skutečně procesu Django?

Toto je nejdůležitější kontrola, pokud váš soubor nastavení již obsahuje SECRET_KEY = os.environ["SECRET_KEY"] nebo ekvivalentní vyhledávání. Proměnná musí existovat v prostředí přesného procesu, který importuje nastavení Django. Nastavení v jednom terminálu automaticky nevloží proměnnou do již běžící služby, kontejneru, správce procesů, úlohy CI nebo samostatného shellu.

Otestujte přítomnost bez vypsání samotného tajného klíče:

python -c "import os; print(bool(os.environ.get('SECRET_KEY')))"
Ilustrace terminálu vygenerovaná AI, která ukazuje boolean kontrolu, že SECRET_KEY existuje v prostředí procesu
Ilustrace vygenerovaná AI: kontrola pouze toho, zda SECRET_KEY existuje, se vyhne vypsání samotného tajného klíče. Spusťte tento příkaz ve stejném kontextu spuštění, který selhává.

Pokud toto vypíše False, opravte injektáž prostředí pro tento proces. Pro rychlý lokální test v shellu použijte syntaxi pro váš shell a poté spusťte Django ze stejného shellu. Například:

# Shell macOS / Linux
export SECRET_KEY='vas-vygenerovany-lokalni-tajny-klic'
python manage.py runserver

# Windows PowerShell
$env:SECRET_KEY = 'vas-vygenerovany-lokalni-tajny-klic'
python manage.py runserver

Pro produkci použijte mechanismus tajných údajů/konfigurace poskytnutý vaší hostingovou platformou nebo správcem procesů, místo abyste umisťovali hodnotu do příkazu, který by mohl být uložen v historii shellu.

Proč přidání SECRET_KEY do souboru .env neopravilo Django?

Soubor .env je pouze soubor, dokud něco nenačte jeho obsah do prostředí procesu nebo váš kód nastavení jej nepřečte. Oficiální příklad Django čte os.environ; Django nevyžaduje ani nedokumentuje vestavěný automatický krok načítání .env. Pokud váš projekt spoléhá na knihovnu dotenv, wrapper frameworku, konfiguraci kontejneru nebo platformu nasazení pro načtení tohoto souboru, ověřte tuto komponentu samostatně a ověřte, že běží předtím, než settings.py přečte SECRET_KEY.

Užitečným krokem je spustit výše uvedenou boolean kontrolu prostředí ze stejného kontejneru, účtu služby, shellu nebo fáze spuštění, která selhává. Pokud vypíše False, ladění obsahu settings.py samo o sobe nevyřeší problém s konfigurací na úrovni procesu.

Ilustrace editoru kódu vygenerovaná AI, která ukazuje soubor .env a vyhledávání SECRET_KEY pomocí os.getenv
Ilustrace vygenerovaná AI běžného nastavení ve stylu dotenv. Důležité: soubor .env musí být načten vaší startovací zásobou; Django automaticky nepřevádí obsah souboru na proměnné prostředí procesu.

Co když se chyba objeví pouze v Dockeru, CI, collectstatic, WSGI nebo ASGI?

To obvykle znamená, že jiný proces nebo fáze spuštění načítá projekt s jiným prostředím nebo modulem nastavení. Chyba se může objevit během collectstatic, migrací, testů, kontroly CI, startu aplikačního serveru nebo proces na pozadí, i když runserver funguje na vašem notebooku.

Nepředpokládejte, že tajný klíč dostupný v době běhu je také dostupný během sestavování obrazu nebo kroku CI. Naopak nepředpokládejte, že proměnná exportovaná v interaktivním shellu je viditelná pro systémovou službu. Zkontrolujte tato dvě fakta v kontextu selhání:

  • Která hodnota DJANGO_SETTINGS_MODULE nebo --settings se používá?
  • Má tento přesný proces neprázdnou proměnnou prostředí SECRET_KEY předtím, než Django importuje nastavení?

Konkrétní způsob injektáže tajného klíče závisí na Dockeru, vašem poskytovateli CI, vašem hostiteli nebo vašem správci procesů. Použijte oficiální mechanismus správy tajných údajů dané platformy. Požadavek na straně Django zůstává stejný: vybraná konfigurace nastavení musí poskytnout neprázdný tajný klíč v době běhu.

Jak ověříte opravu bez odhalení klíče?

Zaprvé, nevypisujte skutečný produkční klíč do logů jen proto, abyste dokázali, že existuje. Ověřte přítomnost pomocí boolean kontroly a poté nechte Django načíst konfiguraci:

python manage.py check

Pro produkční konfiguraci Django doporučuje spouštět kontroly nasazení proti produkčnímu souboru nastavení:

python manage.py check --deploy --settings=config.settings.production

Nahraďte cestu k modulu vaší skutečnou cestou k produkčnímu modulu nastavení. Oficiální kontrolní seznam nasazení konkrétně doporučuje check --deploy a varuje, že by měl být spuštěn proti produkčním nastavením.

Ilustrace terminálu vygenerovaná AI, která ukazuje python manage.py check --deploy s použitím produkčních nastavení
Ilustrace vygenerovaná AI: čistý výsledek kontroly nasazení. Váš skutečný projekt může oprávněně hlásit varování, která je třeba zkontrolovat; tento obrázek není důkazem z testování.

Nakonec restartujte skutečný proces aplikace. Proměnná přidaná po spuštění služby obvykle neovlivní tento již běžící proces. Pokud restartovaný proces projde kontrolami Django a již nevyvolává výjimku, je problém s konfigurací vyřešen.

Které opravy byste se měli vyvarovat?

  • Nenastavujte SECRET_KEY = "" ani nepoužívejte prázdnou výchozí hodnotu. To reprodukuje podmínku, kterou Django odmítá.
  • Negenerujte nový klíč při každém spuštění aplikace. Měnící se klíč může zneplatnit podepsaná data a vytvořit nekonzistentní chování mezi více workerem.
  • Nekopírujte tajný klíč z tutoriálu nebo jiného projektu. Django vyžaduje unikátní, nepředvídatelnou hodnotu a veřejná hodnota postrádá smysl tajného klíče.
  • Neukládejte produkční klíč do Gitu. Kontrolní seznam nasazení Django explicitně doporučuje udržovat jej mimo systém správy verzí.
  • Nevypisujte celý klíč do logů CI nebo produkce. Kontrolujte pouze to, zda je přítomen, pokud nemáte řízený postup auditu tajných údajů.
  • Nepředpokládejte, že soubor .env je načten pouze proto, že existuje. Potvrďte mechanismus načítání a skutečné prostředí procesu.

Praktická cesta rozhodování

SituaceNejlepší další krok
Nový lokální projekt a SECRET_KEY je doslova prázdnýGenerujte bezpečnou vývojovou hodnotu, nastavte ji v aktivní konfiguraci nastavení a znovu spusťte Django.
Existující produkční aplikace náhle selže po nasazeníZkontrolujte vybraný modul nastavení a obnovte zamýšlený tajný klíč z úložiště tajných údajů nasazení, než začnete uvažovat o rotaci.
os.getenv() nevrací žádnou hodnotuOpravte injektáž prostředí pro přesný selhávající proces; vyhněte se záložní prázdné řetězcové hodnotě.
Soubor .env obsahuje klíč, ale Django stále selháváOvěřte, že vaše startovací zásoba skutečně načítá tento soubor před importem nastavení.
Klíč mohl uniknoutProveďte jeho rotaci záměrně; zvažte SECRET_KEY_FALLBACKS pro řízený přechod, kde je to vhodné.
Lokální server funguje, ale CI nebo produkce selháváPorovnejte DJANGO_SETTINGS_MODULE a dostupnost tajného klíče v selhávajícím kontextu spuštění.

Závěrečný kontrolní seznam

  • Potvrďte přesný modul nastavení, který Django načítá.
  • Potvrďte, že SECRET_KEY se v tomto prostředí vyhodnocuje na neprázdnou hodnotu.
  • Použijte unikátní, nepředvídatelnou hodnotu; znovu nepoužívejte veřejný nebo tutoriálový klíč.
  • Udržujte produkční klíč mimo systém správy verzí.
  • Pokud používáte proměnné prostředí, ujistěte se, že proměnná dosáhne do každého procesu, který importuje nastavení Django.
  • Pokud používáte workflow .env, ověřte načítač, místo abyste předpokládali, že Django čte soubor automaticky.
  • Obnovte starý produkční klíč, pokud je problém náhodná ztráta konfigurace; rotujte pouze záměrně nebo pokud je to vyžadováno.
  • Spusťte python manage.py check a pro produkci spusťte check --deploy proti produkčnímu modulu nastavení.
  • Po změně prostředí restartujte skutečnou službu.

Klíčovým bodem je, že tato výjimka nežádá o konkrétní magický řetězec. Říká vám, že aktivní nastavení Django neobsahují použitelný tajný klíč. Opravte zdroj této konfigurace, zachovejte zamýšlený produkční klíč, kde je to vhodné, a ověřte výsledek ve stejném prostředí procesu, který původně selhal.

Zanechat komentář

Jak opravit chybu „PyTorch CUDA Out of Memory“ během trénování modelu

Jak opravit chybu „PyTorch CUDA Out of Memory“ během trénování modelu

Opravte chyby nedostatečné paměti CUDA v PyTorch pomocí praktického postupu: měřte paměť GPU, zmenšete pracovní množinu, použijte AMP a akumulaci gradientů, ukládejte aktivace (checkpointing) a laděte alokátor pouze v případě potřeby.

Jak opravit chybějící hlavičku CORS Access-Control-Allow-Origin v Express.js

Jak opravit chybějící hlavičku CORS Access-Control-Allow-Origin v Express.js

Opravte chybu CORS s chybějící hlavičkou Access-Control-Allow-Origin v Express.js diagnostikou původu, bezpečnou konfigurací cors, zpracováním preflight požadavků a ověřením hlaviček.

Jak opravit chybu „Cannot read properties of undefined (reading 'map')“ v Reactu

Jak opravit chybu „Cannot read properties of undefined (reading 'map')“ v Reactu

Opravte chybu Reactu „Cannot read properties of undefined (reading 'map')“ vysledováním nedefinované hodnoty, opravou stavu a dat z API a přidáním bezpečných ochranných mechanismů při vykreslování.

Jak opravit chybu Module Not Found: Nelze vyřešit fs ve Webpacku

Jak opravit chybu Module Not Found: Nelze vyřešit fs ve Webpacku

Opravte chybu Webpacku „Nelze vyřešit 'fs'“ správným řešením: přesuňte kód pouze pro Node na server, použijte závislost bezpečnou pro prohlížeč, nastavte fs:false pouze u volitelných funkcí nebo správně cílte na Node.

Jak opravit chybu „Supabase API Key Not Found“ v proměnných prostředí

Jak opravit chybu „Supabase API Key Not Found“ v proměnných prostředí

Opravte chybějící klíče API Supabase v Next.js, Vite, Node, nasazeních a Edge Functions. Použijte aktuální názvy publikovatelných/secret klíčů, správné soubory env a bezpečné kroky ověření.

Jak opravit chybu „Flutter Command Not Found“ (cesta) v systému macOS

Jak opravit chybu „Flutter Command Not Found“ (cesta) v systému macOS

Opravte chybu „flutter: command not found“ v systému macOS nalezením SDK Flutter, přidáním složky bin do proměnné PATH, znovu načtením Zsh a ověřením nastavení.

Jak opravit chybu „Port 8080 je již používán“ v terminálu na Windows, macOS a Linuxu

Jak opravit chybu „Port 8080 je již používán“ v terminálu na Windows, macOS a Linuxu

Opravte chybu „Port 8080 je již používán“ nalezením procesu, který port vlastní, jeho bezpečným zastavením, řešením problémů s Dockerem nebo výběrem nového portu.

Jak opravit chybu Django „ImproperlyConfigured: The SECRET_KEY Setting Must Not Be Empty“

Jak opravit chybu Django „ImproperlyConfigured: The SECRET_KEY Setting Must Not Be Empty“

Opravte chybu Django SECRET_KEY must not be empty kontrolou aktivního modulu nastavení, proměnných prostředí, generování klíče a konfigurace produkčního prostředí.

Jak opravit chybu „Connection Refused“ u PostgreSQL na localhostu portu 5432

Jak opravit chybu „Connection Refused“ u PostgreSQL na localhostu portu 5432

Opravte chybu „connection refused“ u PostgreSQL na localhost:5432 kontrolou stavu serveru, nástroje pg_isready, naslouchání na portu, souboru postgresql.conf, mapování Dockeru a ověřování.

Jak opravit chybu „Hydration failed because the initial UI does not match“

Jak opravit chybu „Hydration failed because the initial UI does not match“

Opravte nesoulad hydratace v Reactu nebo Next.js tak, aby se serverové HTML shodovalo s prvním vykreslením na klientovi, a poté ověřte výsledek ve vývojovém i produkčním prostředí.