Vaje: Spletni vmesnik
Spletni vmesnik za vislice
Priprava modela
Da bo naš strežnik lahko hkrati uporabljalo več igralcev, bomo naš model razširili s krovnim razredom Vislice, ki bo vseboval podatke o vseh igrah ter njihovem trenutnem stanju (rezultatu metode ugibaj). Igre bomo predstavili s slovarjem, katerega ključi bodo IDji iger, vrednosti pa pari, v katerih bo prva komponenta objekt razreda Igra, druga komponenta pa njeno zadnje stanje (PONOVLJENA_CRKA, PRAVILNA_CRKA, ZMAGA, …).
V datoteki
model.pydefinirajte konstantoZACETEK, ki se razlikuje od prej definiranih konstant.V datoteki
model.pynapišite nov razredVislice, ki vsebuje:Metodo
__init__, ki nastavi vrednost atributaigrena prazen slovar.Metodo
prost_id_igre, ki vrne ID, ki še ni uporabljen v atributuigre.Metodo
nova_igra, ki s pomočjo funkcijenova_igras prejšnjih vaj sestavi novo igro z naključnim geslom. Par igre ter njenega začetnega stanjaZACETEKnaj v slovar shrani pod še ne zasedenim ključem, ki naj ga metoda tudi vrne.Metodo
ugibaj, ki sprejmeid_igrein črko ter na ustrezni igri požene metodougibaj(iz razredaIgra) in nato igro ter vrnjeno stanje zapiše nazaj v slovar.
Priprava spletnega vmesnika
S strani knjižnice Bottle si prenesite datoteko
bottle.py.S spletne učilnice si prenesite osnovno HTML predlogo ter slike. Predlogo premaknite v mapo
views, slike pa v mapoimg.V glavni mapi repozitorija ustvarite datoteko
vislice.py, kjer:- Uvozite modula
bottleinmodel. - Definirate spremenljivko
vislice, ki naredi objekt razredaVislice. - Z dekoratorjem
bottle.getna naslov"/"pošljete predlogoindex.tpl. - Na dnu datoteke zaženete server z
bottle.run(reloader=True, debug=True).
- Uvozite modula
Po vzoru predloge
index.tplpripravite predlogoigra.tpl, ki bo pokazala vse podatke o izbrani igriigraz IDjemid_igreter stanjemstanje:- Trenutno uganjeni del gesla
- Nepravilne črke
- Stopnjo obešenosti
V datoteki
vislice.pydefinirajte:- Funkcijo
nova_igra, ki ob zahtevi strani/igra/prek metode POST sestavi novo igro, pridobi njen IDid_igrein naredi preusmeritev na naslov/igra/.../(kjer...zamenjamo z ustreznim IDjem nove igre) - Funkcijo
pokazi_igro, ki ob zahtevi strani/igra/<id_igre:int>/prek metode GET naloži igro z IDjemid_igrein njeno trenutno stanje ter oboje prikaže s predlogoigra.tpl. - Funkcijo
ugibaj, ki ob zahtevi strani/igra/<id_igre:int>/prek metode POST najprej naloži igro z danim IDjem, pridobi trenutno črko iz obrazca s poljemcrka, nato naredi ugib s podano črko in naredi preusmeritev nazaj na isti naslov (tokrat prek metode GET).
- Funkcijo
Z uporabo
% if,% elifin% elsesintakse v predlogiigra.tplprikažete ali je igralec zmagal oz. izgubil in mu ponudite gumb za začetek nove igre, sicer pa vnosno polje (z imenomcrka) in gumb, s katerim igralec ugiba novo črko.
DODATNO:
- Preprečite, da bi uporabnik lahko ugibal več kot eno črko naenkrat
- Z dekoratorjem
@bottle.getopremite naslov'/img/<picture>', ki uporablja funkcijobottle.static_fileza serviranje slik. Parameterrootnastavite na'img'. Nato stopnjo obešenosti v templatuigra.tplprikažite preko slik.
Lepše oblikovanje
Če uporabljamo veliko predlog, se koda za oblikovanje kmalu prične ponavljati. K sreči bottle nudi orodja, s katerimi to popravimo.
Izluščite skupno glavo in nogo predlog
igra.tplinindex.tpl, ter shranite vbase.tpl.Z metodo
rebaseodstranite sedaj nepotrebno kodo izigra.tplinindex.tpl.Dodatno olepšajte spletno stran z izboljšanjem
base.tpl.