Žangovinky #32
Komentovaný překlad Django Dose Community Catchup, Episode #32.
Během prosince se na svém blogu Seek Nuance pěkně rozepsal John DeRosa. V
článku “A performance lesson on Django QuerySets” dokazuje, že
bezmyšlenkovité nasazení QuerySet funkce iterator() přináší spoustu
problémů. Menší paměťové nároky byly v jeho případě draze vykoupeny četností
dotazů na databázi (co iterace to dotaz, navíc umocněné dvaceti simultánně
spuštěnými Celery tasky).
V druhé polovině článku se zmiňuje o špatném pochopení vlastnosti QuerySetu,
tj. že jsou lazy (k vyhodnocení dojde až je to nezbytně nutné) a kešované. Na
praktické ukázce demonstruje, že každý vytvořený QuerySet generuje databázový
dotaz, což v kontextu jeho kódu znamenalo neúměrné zatížení PostgreSQL.
David Cramer je masakrální drsoň. Pokaždé když něco publikuje, tak je to
perla. A pokaždé mi trvá sakra dlouho, než pochopím o co jde.
Nejinak tomu je i v článku “Tracking changes to fields in Django”.
Pokud jsem se někde šeredně nesek, tak nám dává k dispozici dekorátor, s
jehož pomocí můžeme sledovat historické změny atributů u konkrétního modelu.
Fachá to tak, že pokud např. obj.name == 'Petr' a přenastavíme jej na
obj.name = 'Pavel', pak metoda obj.has_changed('name') vrátí True
(atribut name se změnil), metoda obj.old_value('name') vrátí ‘Petr’ a metoda
obj.whats_changed() nás podaruje slovníkem změněných atributů. Tato ultimátní
“změnokeška” se resetuje při vytvoření instance a během uložení objektu.
Daniel Greenfeld rozvířil debatu o Template Languages. Ve svém postu hájí
směr, který tvrdí že šablonovací jazyk musí být stupidní. Čím méně toho umí,
tím lépe.
Reakce na sebe nenechaly dlouho čekat. Autoři alternativních šablonovací jazyků
(Armin Ronacher — Jinja2, Mike Bayer — Mako) vysvětlují, proč toho
jejich jazyky umí víc + jeden pohled zvenčí.
Špetka sci-fi z velkého světa (pro mě rozhodně). Pokud stejně jako chlapci
z The Washington Times spravujete vícero serverů a začínáte mít binec v
Python balíčcích (na serveru A verzi 1, na serveru B verzi 1.2 a na serveru C
nic), může se vám šiknout jejich fabfile.py.
Poslední zpráva hodná zmínky: nedávno implementovaná unittest metoda
assertNumQueries dráždila Luke Planta natolik, že pro ni napsal speciální
pomocnou třídu FuzzyInt. S její pomocí je možné testovat počet SQL dotazů v
zadaném intervalu. Jak Luke trefně komentuje, vlivem kešování se lehce stane,
že počet SQL dotazů v aplikaci kolísá, a testovat je na exaktní počet přináší
spíš problémy než užitek.
A teď něco úplně jiného. Novinky z chobotu:
- Byly rozšířeny funkce mail_admins() a mail_managers(). Odteďka je možné k nim připínat HTML přílohy, čehož se hned využilo pro odesílání přítulnějších error emailů. 3× hurá!
- Odskočme si do views, přesněji na jejich konce. Pokud nejste moc indie, budete
tam mít buďto nějakou
HttpResponse,render_to_responsenebo generické view. Odteďka ale budeme potkávat nového kamaráda TemplateResponse. Ten dostal do vínku kopec lenosti, a obsah generuje až to je skutečně nutné. Díky této povaze bude např. možné změnit na poslední chvíli jméno šablony, nebo do ní poslat upravený či rozšířený kontext. Už se těším na prčovní middlewary, které z této vlastnosti vytěží maximum.
Poznámka: Kopa práce, těžká témata a blížící se vánoce. Výsledek? Žangovinky #31 nejsou a nebudou. Komu chybí, nechť opráší AČ slovník, a postne sem link.
Pěkné vánoce!