Webová stránka pro filmový festival na GEKOMu pro rok 2024
- server ukládá do variable app.room všechny místnosti, ve kterých se něco děje (podle jednotlivých dní). to je důležitý pro zobrazování programu. tahle variable se ale musí updatovat před každým requestem, protože když běží wsgi na víc workerech tak ta promenna se nesyncuje a tim padem když se něco updatne v programu tak je to potom out of sync. podobnej problem je u fotogalerie (variable app.albums_dict)
- muj program se interne jmenuje "favorite", protoze jsem debil a ted se mi to uz nechce predelavat. mozna se i nekde na strance jmenuje "oblibene", ale je to proste muj program
- system meho programu je udelany pres cookies. client posle request na server, server posle zpatky updatovanou cookie. slo by to udelat i tak, ze by se cookie menila rovnou u clienta javascriptem. takhle se mi to zda hezci, jednodussi a taky to usnadnuje implementaci pripadnyho verejnyho login systemu (jakoze by se lidi prihlasovali a jejich progam by se neukladal jenom do cookiesky, ale i nekam do databaze)
- kvuli browser cache se css a js soubory versionujou. kdyz chci neco zmenit v css nebo js souboru tak to zmenim napr. v main.css, pak udelam kopii main.css s version cislem (napr. main-007.css) a zmenim vsechny odkazy na ten soubor (pokud je to jenom mala zmena ktera nemusi platit hned, upravim jenom main.css a pak to zkopiruju do posledni verze)
- vsechny routs v api.py maji dany url prefix /api (definovane v
__init__.py) - komentare a nazvy veci jsou tak napul cesky a napul anglicky, nektery veci se proste lip pisou v anglictine nez to krkolome prekladat
- kdyz naclonuju repo z githubu a chci to spustit, musim nejdriv spustit create_db.py a vytvorit dir static/upload, static/fotogalerie a soubor static/fotogalerie/albums.json (do nej staci dat prazdny dict {})
- obrazky k hostum a workshopum se ukladaji do stejny slozky jako soubory z upload
- v lokalnich funkcich se casto pouziva variable name id - vim, ze je to spatne podle PEP protoze existuje builtin fce id, ale jsem linej to vsude menit a mam pocit ze v local scopu to moc neva
- context-menu (cm) = item-details, omylem jsem to nekde nazval jinak a nechce se mi to menit
- program_day a favorite_day jsou hodne podobny. cast s vytvarenim context menu je uplne stejna. program se lisi v malych detailech
- v program_day se po prihlaseni jakehokoliv usera ukaze moznost lokalne menit barvy program itemu
- u filmu property hidden znamena, ze se nebude zobrazovat na strance "filmy" a "cely program" - pouzivam k tomu, kdyz chci nejaky film pustit ve vice tridach najednou, ale nechci ho vickrat na strance filmy
- fce add_hidden_copy_film (odkaz z edit_program.html) vytvori kopii daneho filmu s hidden=True a image_filename="default.png"
- u hidden filmu je problem s odkazemz z programu na stranku filmy - resim tak, ze hidden filmy prevedu do dict a zmenim u nich id na id filmu se stejnym nazvem co neni hidden, pak se odkaz v programu vytvori na ten co neni hidden a funguje to spravne
- program_all.html a s tim spojeny endpoint jsou stary a neni na ne nikde odkaz, ale nechavam je kdyby se to nekdy melo pouzit tak staci pridat link do base.html
Work in progress mode - kdyz je zapnuty, tak se requesty na program, workshopy a hosty presmeruji na /wip (pokud neni user prihlaseny).
Lze obejit tim, ze do url pridam ?force-display (kvuli testovani s ostatnima abych nemusel delat loginy)
Nastavuje se v __init__.py. V decorators.py je definovany dekorator wip_disabled. Ten je u vsech fci v routs.py, ktery maji byt zakazany v wip modu.
Blueprint shop (shop.py) obsahuje fce k systemu kavarny a cajovny. Vsechno se uklada do stejny db jako program atd. V budoucnu by se sem mohl pridat i merch nebo jiny veci na prodej.
Na serveru je jednoduchy system prihlaseni a opravneni. User muze mit 3 typy opravneni:
- admin - muze vsechno
- perm_shop - muze editovat kavarnu/cajovnu
- perm_program_edit - muze editovat program
- perm_fotogalerie - muze editovat fotogalerii
Pro kazdy typ opravneni je v
decorators.pydefinovany dekorator, ktery danou route chrani. Vsechny 3 dekoratory pocitaji s tim, ze je current user prihlaseny (takze napr. k funkci, ke ktere ma mit pristup jenom admin musim dat po rade dekoratory @login_required a @admin_required)
Usery lze editovat po admin prihlaseni na /admin/users (definovano v routs.py)