Hlavní navigace

Šablony stránek pro Zope: závěr

Miloš Průdek

V posledním dílu seriálu se podíváme, jak se z Nákupního košíku odstraňují položky, a zamyslíme se nad budoucností Zope a souvisejících technologií.

Pokud jste párkrát přidali zboží do košíku, možná vás napadlo zkusit nějakou zvrhlost – co třeba zadat do objednávky záporné množství? Objednávka se odečte, což je celkem rozumné. Jenže když zadáte dostatečně velké (nebo malé? jsem zmaten :-) záporné číslo, bude objednáno záporné množství… což je bezva způsob, jak si vylepšít skóre na vaší kreditce… protože majitel webového obchodu vám rázem bude dlužit peníze.

Pěkný příklad známé poučky webového programování „Nikdy nedůvěřuj údajům, které zadal uživatel!“. Řešení tohoto problému nechám na vás. Můžete se rozhodnout lišácky použít na vhodném místě funkci abs(), ať je podvodník potrestán zvýšením objednávky, nebo můžete zobrazit stránku s textem „Vy…vy… vy… vy jeden VY!“.

Mazání položek – podruhé

jedenáctém dílu tohoto seriálu byla řeč o skriptu getItems v situaci s prázdným košíkem. Teď máme v košíku nějaké zboží, a tak se znovu vrátíme na začátek probíráného úseku šablony index_html (tedy hned za značkou <div…>).
Podmínka tal:condition=„cu­rrent_items“ je tentokrát splněná, protože skript currentItems vrací neprázdný seznam. Nebudu urážet vaši inteligenci rozebíráním skriptu currentItems, snad jen vypíchnu, že úvodní řádek session=contex­t.REQUEST.SES­SION je standardní způsob, jak načíst relaci do skriptu a pohodlně s ní pracovat.

session=context.REQUEST.SESSION
quantities=session.get('items', {})
items=[]
for id, quantity in quantities.items():
   item=container.getItem(id)
   item['quantity']=quantity
   items.append(item)
return items

Výsledek skriptu getItems je prezentován v tabulce bezprostřeně pod značkou <form…>. Všimněte si, že položka price byla dodána skriptem getItem, který byl podrobněji popsán ve dvanáctém dílu seriálu. Teď se ke skriptu getItem vrátíme, abychom popsali větev přeskočenou ve dvanáctém dílu:

item=items.get(id)
if item is None:
    return None
item['id']=id
return item

Tento úsek vlastně pouze zplacatí jeden záznam z košatého slovníku slovníků definovaného na začátku skriptu getItems. Vytáhne požadovaný slovník, přidá k němu jeho id jako další výraz slovníku a výsledek vrátí volajícímu programu. Takové transformace jsou v Pythonu velmi časté: slovník do seznamu, seznam do slovníku a jiné akčnější úkoly se stanou po troše praxe frázemi, které sypete z rukávu.1

Skript getTotal volaný na konci tabulky je opět triviální, stejně jako skript deleteItems, který je akcí formuláře.

Tím je popis Nákupního košíku uzavřen.

Konec a šáteček

Pokud jste vydrželi až sem, tak zírám. Délka popisu Nákupního košíku by mohla netrpělivé svádět k myšlence, že jednodušší je stáhnout si nějaký hotový program s názvem „nákupní košík“ a vlepit ho do svých stránek HTML. Samozřejme, je to řešení. Také můžete svůj webový obchod hostovat u komerčního poskytovatele a nemusíte programovat vůbec. Zope je o něčem jiném. Oddělení Public Relation firmy Zope Corp. v minulosti bohužel trošku zavádějícím způsobem tvrdilo, že Zope je hotové řešení, které funguje po vybalení z krabice jako dokonalé webové stránky. Ve skutečnosti je Zope „pouhý“ framework, určený pro vývoj aplikací šitých na míru. Podporuje i rapid prototyping a rapid application development, ale není to konzerva s hotovým řešením. Podobně ani například Zope Content Management Framework (CMF) není a nikdy nebyl hotovým systémem pro řízení obsahu, ale jen nadstavbou pro vytváření takových systémů. Zope je zkrátka stavebnice a bez fantazie a tvořivosti se neobejdete.

Pokud spěcháte, není vše ztraceno: množství bezplatně dostupných tzv. Produktů pro Zope lze použít a okamžitě tak vyřešit nejběžnější úkoly bez programování, pro zájemce o komunitní stránky je tu báječný hotový systém Plone, jehož vzhled lze dokonale uzpůsobit a nemít tedy stejné stránky jako desítky jiných medvídků gumídků :-)

Zope se nadále divoce vyvíjí. Zatímco drtivou většinu programátorské práce na verzi Zope 1.x a Zope 2.x odváděla mateřská firma Zope Corp., koncem tohoto nebo počátkem příštího roku bude vydána verze 3, kde je příspěvek členů komunity mnohem významnější. Bude představeno množství nových technologií a vývoj starých technologií jako DTML a ZClasses bude zastaven. Ale neztratíte kompatibilitu – staré programy bude možné provozovat i v Zope 3.

Protože v několika posledních článcích skoro nikdo neposílal diskusní příspěvky k tomuto seriálu, myslím, že je nejvyšší čas seriál ukončit. Prosím teď mlčící většinu, aby se vyjádřila, zda by stála o další články o Zope a souvisejících věcech 2.  Slíbil jsem Johance, že budou vtipnější.


1

Když vás transformace dat procedurálním stylem znudí, vždy se můžete zabavit výletem do říše funkcionálního programování, řízeného zabudovanými funkcemi map, reduce a filter. Nefundamentalis­tický a maximálně užitečný úvod do zpracování textů najdete v knize Text Processing in Python od Davida Mertze.  Ten odkaz nevede na Amazon.com, kde lze knihu zakoupit za 50 USD, ale na web laskavého pana Mertze, kde si můžete knihu zdarma stáhnout. Na pláž je to ideální čtení!
2 Nebojte se, ne hned teď. Nejdřív můžu něco napsat v říjnu. Napište do diskuse, jaká témata by vás zajímala. Když nebude žádný zájem, nebudou žádné články!

Našli jste v článku chybu?

11. 4. 2005 13:38

karel.kabelka@post.cz (neregistrovaný)
Ahoj zdravím, zajímalo by mě a byl bych velice rád, kdyby mi někdo poradil, nevím jak mám nakonfigurovat workflow v Plone. Děkuji

4. 8. 2003 14:53

Miloš Průdek (neregistrovaný)

Přiznám se, že jsem o Archetypes vůbec neslyšel. Máte nějaký odkaz na informace?

Root.cz: Nová třída SD karet A1 s vysokým výkonem

Nová třída SD karet A1 s vysokým výkonem

DigiZone.cz: SES zajistí HD pro M7 Group

SES zajistí HD pro M7 Group

120na80.cz: Rovnátka, která nejsou vidět

Rovnátka, která nejsou vidět

DigiZone.cz: R2B2 a Hybrid uzavřely partnerství

R2B2 a Hybrid uzavřely partnerství

120na80.cz: Boreliózu nelze žádným testem prokázat

Boreliózu nelze žádným testem prokázat

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

DigiZone.cz: V Plzni odstartovalo Radio 1

V Plzni odstartovalo Radio 1

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Vitalia.cz: Nejlepší obranou při nachlazení je útok

Nejlepší obranou při nachlazení je útok

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Měšec.cz: Za palivo zaplatíte mobilem (TEST)

Za palivo zaplatíte mobilem (TEST)

Měšec.cz: Exekuční poradna: ptejte se online

Exekuční poradna: ptejte se online

Vitalia.cz: To nejhorší při horečce u dětí: Febrilní křeče

To nejhorší při horečce u dětí: Febrilní křeče

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Podnikatel.cz: E-Ježíšek si zařádí: nákupy od 2 do 5 tisíc

E-Ježíšek si zařádí: nákupy od 2 do 5 tisíc

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?