Python - HTML generator, drugi dio

Sadržaj
U prvom dijelu našeg vodiča uspjeli smo natjerati naš program da uzme tekstualnu datoteku i generira blokove sa stavcima koje sadrži, a također smo uspjeli izvesti ono što smo ugradili u vanjsku datoteku.
Druga iteracija
Kao što smo rekli na početku, moramo to učiniti najmodularniji program a da bismo to postigli moramo provesti svoje objektno orijentirani kod.
Za to moramo napraviti potrebne apstrakcije kako bismo mogli izgraditi klase koje sadrže metode koje postižu naše ciljeve.
Zahtjevi
Napravimo popis komponenti koje moramo izgraditi, s tim ćemo znati što moramo imati kako bi naš program bio potpuniji:
  • A parser, ovaj će nam objekt omogućiti čitanje teksta i rukovanje ostalim klasama.
  • Pravila, Donijet ćemo pravilo za svaku vrstu bloka, što će nam omogućiti da otkrijemo koju vrstu bloka imamo i koji format bismo na njega trebali primijeniti.
  • Filteri, s njima ćemo ugraditi regularne izraze kako bismo mogli rukovati nekim unutarnjim elementima.
  • Rukovatelji, te će rukovatelje koristiti parser za generiranje obrađenog izlaza. Svaki rukovatelj moći će rukovati različitim vrstama naljepnica.
Rukovatelj
Ova klasa će nam omogućiti rukovanje određenim vrstama oznaka za izlaze, pogledajmo kôd koji može sadržavati:

Tada moramo izgraditi super klasu Rukovatelji, to će nam omogućiti upravljanje različitim rukovatelji koje nam trebaju. Za to ćemo vidjeti sljedeći kod:
 class Handler: def povratni poziv (self, prefiks, ime, * args): method = getattr (self, prefiks + ime, None) ako se može pozvati (method): return method ( * args) def start (self, name): self. povratni poziv ('start_', name) def end (self, name): self.callback ('end_', name) def sub (self, name): def substitution (match): result = self.callback ('sub_', ime, podudaranje) default = match.group (0) povratni rezultat ili zadana povratna zamjena 

Ako sada malo vježbamo, možemo vidjeti naš dosadašnji napredak:
 >>> iz rukovatelja uvoz HTMLRenderer >>> rukovatelj = HTMLRenderer () >>> uvoz re >>> re.sub (r '\ * (. +?) \ *', handler.sub ('naglasak'), ' Ovo * je * test ')' Ovo je dokaz' 

Kao što vidimo u prethodnom pozivu, prvo uvozimo našu klasu HTMLRenderer što je naše rukovatelj, zatim uvozimo ponovno s kojima ćemo obraditi regularne izraze, zatim idemo na re.sub izraz i način na koji ga treba primijeniti, zatim tekst i na kraju vidimo da je izlaz generirao potreban HTML kod.
Pravila
Kad dobijemo rukovatelje, vrijeme je za stvaranje pravila, oni će nam pomoći da odredimo odredište različitim blokovima, međutim, ono mora biti objektno orijentirano kako ne bismo završili s velikim brojem blokova ugniježđeno ako za potvrđivanje svih slučajeva.
Moramo imati i super klasu koja upravlja našim pravilima, pogledajmo sljedeći kod koji sadrži super klasu.
 klasa Pravilo: def akcija (self, block, handler): handler.start (self.type) handler.feed (block) handler.end (self.type) return True 

Kao što vidimo metodu akcija () prima blok i vrstu rukovatelja koji mora koristiti, s tim će moći razlikovati koji blok mora primijeniti na ono što prima po parametrima i tako finalizirati kôd koji se mora ispisati.
Ovime završavamo vodič i ostavljamo svima da nastave dok ne pripremimo projekt prema smjernicama navedenim na početku u prvom dijelu ovog vodiča.Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave