Hlavní navigace

Dvojitá alchymie IV - Context Factory

25. 10. 2013 20:45 (aktualizováno) Petr Blahoš

Podívejte se na všechny díly seriálu nebo na zdrojáky příkladu.

Dnes to bude z trošku jiného soudku. Uděláme si jen jeden krok, o to bude zajímavější.

step08

První věc, kterou jsme dosud dělali v handleru (views/views.py: list/edit/delete) bylo, že jsme si pořídili data. Pyramid ale umožňuje pro routu definovat context factory, která nám ta data připraví, takže v handleru už nemusíme dělat nic.

# nezapomeňte git pull
cd step08
python setup.py develop

pserve --reload development.ini

Když se teď podíváte na __init__.py, tak uvidíte:

    config.add_route("list", "/list/{model}",
            factory="faapp.model.resources.OrmContext", )
a podobné. Co to znamená? Předtím, než je vyvolán handler je na zavolaná tahleta factory s parametrem request, a výsledek je uložen do request.context a ten je pak samozřejmě k dispozici v handleru. Mrkněte se do views/views.py a tam uvidíte, že přes context si jen sáhnu pro data, která potřebuju. Kód pro vyhledání těch dat pak najdete v model/resources.py. Namítnete, že kód se vlastně jenom přesunul z jednoho místa na jiné, a budete mít pravdu. Mě je ale tenhle přístup sympatický z důvodu logiky aplikace.
  • S contextem: Mám request, ten „implikuje“ nějaký kontext. Takže teď mám request a context, a v handleru se postarám o to, že se s v rámci contextu provede to, co se provést má.
  • Bez contextu: Mám request. V handleru si k requestu najdu data, a něco s nimi provedu.
S tím contextem mi to přijde takové správnější. Kromě toho se časem přes context dostaneme od routingu k traversalu, a předpokládám, že i k nějakým právům, ale tak daleko ještě nejsem.

Příště uděláme jen takovou blbůstku: Zařídíme, aby v našich formalchemy šablonách bylo k dispozici _ pro překlad.

Sdílet