uvx copier copy https://github.com/trojsten/django-scaffold.git .
A následne si treba vygenerovať lock súbory a nainštalovať dependencies:
uv sync
pnpm install
V novovytvorenom projekte sú predpripravené nasledovné veci:
- Django
- environs pre načítavanie env premenných
- psycopg 3 (+binary) pre pripojenie k postgres databáze
- django-debug-toolbar, sidebar s rôznymi debug nástrojmi
- django-probes na skontrolovanie pripojenia k DB pred štartom
- django-cleanup na automatické vymazávanie related súborov pri vymazaní objektu
- django-widget-tweaks na renderovanie formulárov
- django-tables2 na renderovanie tabuliek
- sentry-sdk na posielanie chýb do Sentry / Glitchtip serveru
- nakonfigurované logovanie
- TailwindCSS na frontend štýl
- htmx (+django-htmx) pre "AJAX-style" interaktívne elementy
- Stimulus pre funkcionalitu vyžadujúcu JS
- Iconify Tailwind na UI ikony
- django-types pre lepšiu autocomplete podporu
- gunicorn ako produkčný WSGI server
- Docker setup založený na trojsten/django-docker
- ruff na formátovanie Python kódu
- djade na formátovanie Django template súborov
- pre-commit pre automatické spúšťanie formatterov a iných nástrojoch pri commite
- Github CI workflow na zbehnutie pre-commit hookov v pull requestoch
Tiež je možnosť si pri vytváraní projektu zvoliť aj Trojsten súčasti:
- mozilla-django-oidc nakonfigurované pre Trojsten ID prihlásenie
- Trojsten primary color
Veľa našich projektov používa štruktúru Django projektu, ktorá je trochu
odlišná od tej predvolenej, ktorú Django používa defaultne.
Konkrétne, my dávame všetky aplikácie do priečinka projektu, nie vedľa
neho. Potom napríklad importy z aplikácií sú project.app.models
miesto
app.models
, ako je zvykom v štandardných Django projektoch.
Zvyšuje to trochu prehľadnosť projektu a jeho koreňového adresára.
Avšak, vyrábať takéto aplikácie vyžaduje trochu mágie, lebo startapp
to nevie úplne automaticky robiť:
mkdir projekt/app
./manage.py startapp app projekt/app
Potom treba v projekt/app/apps.py
treba upraviť:
name
zmeniť naprojekt.app
- (optionally) zmeniť
label
naprojekt_app
, toto je dobrý nápad, lebo občas 3rd party aplikácie majú generické názvy (napr.rules
), ale aj Django builtins (admin
), ktoré môžu kolidovať s labelmi vlastných aplikácií
Odporúča sa využívať v projektoch prístup Fat Models, Thin Views, ktorý hovorí zjednodušene toto:
- Thin Views: Views by mali byť čo najmenšie, riešiť primárne logiku
spracovania vstupov a výstupov.
Akcie by mali delegovať, mali by obsahovať čo najmenej biznisovej logiky.
Napríklad: view zavolá
user.deactivate()
miesto implementácie logiky (user.is_active=False
,...). - Fat Models: Modely by mali zaobalovať doménovú logiku a integritu dát.
- Metódy na manipuláciu s dátami modelu (už spomenuté
user.deactivate()
) - Metódy na získanie komplexnejších hodnôt (napr.
product.in_stock
) - Pre komplexnú aplikačnú logiku, ktorá potrebuje volať externé služby, pracovať s viacerými modelmi je vhodné vytvoriť jednoduchý service layer (jednoduchá Python funkcia, trieda...)
- Metódy na manipuláciu s dátami modelu (už spomenuté
- Nebáť sa využiť
custom Manager
a custom QuerySet.
- Manager: table-level operácie (operácie na viacerých inštanciách modelu)
- QuerySet: filtrovanie riadkov, anotácie, zoraďovanie
Doplňujúce čítanie: Against service layers in Django, More on service layers in Django.
- rules, object-level permissions na základe predikátov
- procrastinate, Postgres task queue
- django-rq, Redis task queue
- django-ipware na spoľahlivé zisťovanie IP adresy používateľa
- mjml-python na formátovanie responzívnych emailov (má vstavanú MJML binárku)
- typst na generovanie PDF dokumentov pomocou Typstu
- markdown na renderovanie markdownu do HTML
- djangorestframework na implementáciu REST API
- django-qr-code na renderovanie QR kódov
- pillow na manipuláciu s obrázkami
- pygments na syntax highlighting kódu
- django-phonenumber-field na uchovávanie a validáciu tel. čísiel
- django-silk na logovanie requestov a SQL dotazov
- django-simple-history na uchovávanie histórie zmien modelov
- Meilisearch ak treba sofistikované vyhľadávanie