Přejít k navigační liště

Zdroják » Různé » web.py – první aplikace

web.py – první aplikace

Články Různé

V dnešním díle seriálu již přejdeme k instalaci prostředí a tvorbě webové aplikace. Skrze ukázky kódu se budeme věnovat konfiguraci, zpracování URL i testování. Nakonec si vytvoříme ukázkovou aplikaci, na které nabyté znalosti patřičně využijeme.

V minulém díle jsme se zakousli do teorie webového frameworku web.py, dnes už od teorie přesoupíme k praxi a budeme se věnovat tvorbě webové aplikace. Začněme tedy instalací samotného Pythonu.

Instalace Pythonu

Pro použití web.py je samozřejmě nutné mít nainstalovaný Python. Ten je aktuálně ve dvou stabilních verzích 2.7.6 a 3.3.2, přičemž pro obě existuje balíček web.py. My budeme používat verzi 2.7, na které je postavena hlavní větev web.py.

Instalační soubory naleznete na stránkách Pythonu http://www.python.org/getit/. Pro Windows je zde klasický instalátor, uživatelé Linuxu si se stahováním instalátorů nemusí lámat hlavu, většina distribucí má totiž Python obsažen v základní instalaci (pokud ne, lze jej získat ze stránek Pythonu či z repozitářů distribuce).

Po dokončení instalace budete mít k dipozici aplikaci Python IDLE, ta obsahuje příkazový řádek i vývojové prostředí pro editaci a spouštění scriptů.

Instalace web.py

Balíček web.py je možné nainstalovat rovnou do složek Pythonu, to ale z hlediska budoucí distribuce aplikace nelze doporučit. Nejjednodušší možností je celou knihovnu stáhnout z oficiální adresy http://webpy.org/static/web.py-0.37.tar.gz a její složku web vložit do adresáře aplikace.

Pozn.: Problémy týkající se distribuce aplikace pomáhají řešit nástroje jako virtenv či setuptools, těmi se ale v našem seriálu zabývat nebudeme.

Adresářová struktura

Jak již bylo v minulém díle řečeno, nic zde není pevně dáno, to se týká i adresářové struktury. Zde je návrh možné struktury aplikace vycházející z jejích základních potřeb:

Aplikace
├── aplikace
├── web
├── static
├── templates
└── main.py

Složka aplikace bude obsahovat vytvořené moduly Pythonu, web obsahuje framework web.py, static obsahuje statické soubory, templates obsahuje šablony stránek a main.py je hlavním řídícím kódem aplikace. Dle potřeby je možné přidat i složky jako logs, scripts apod.

Samotná aplikace

Jádrem web.py aplikace je jeden nebo více souborů, které se starají o základní konfiguraci, přiřazování adres a servírování stránek. V modelu MVC by tedy tyto soubory zastávaly roli kontrolerů.

Konfigurace

V hlavním souboru web.py aplikace se obvykle provádí konfigurace databází, sessions, vykreslování šablon, globální proměnných a konečně i testovacího serveru.

Zde je ukázka, jak takový kód může vypadat:

import web

///////////////////        
// mapování urls //
///////////////////

app = web.application(urls, globals())
render = web.template.render('templates/', base='base')
session = web.session.Session(app, store = web.session.DiskStore('sessions'))

//////////////////////
// jednotlivé třídy //
//////////////////////

if __name__ == "__main__":
    app.run()

V kódu se nachází import modulu web, vytvoření aplikace, vytvoření renderu šablon (předáváme složku obsahující šablony a případně i základní šablonu a globální proměnné), nastavení sessions (s ukladáním do složky sessions), nakonec přidáme kód pro nastartování vývojového serveru při spuštění kódu.

URL handling

Pro párování adres s jednotlivými třídami slouží množina Pythonu, ta může vypadat například takto:

urls = (
    '/':'Index',
    '/retezec/(.+)':'ZpracujVstup',
    '/cislo':'UmocniVstup',
    '/cislo/(\d+)':'UmocniVstup'
)

Jak vidíte, v množině se nachází páry složené z URL a názvů tříd, které mají requesty na daných adresách zpracovávat, jedné třídě lze přitom přiřadit i více adres. U druhé a čtvrté adresy si všimněte použití regulárních výrazů (v prvním případě pro libovolnou hodnotu, ve druhém pro číselnou) sloužících pro vložení argumentů, díky tomu se můžeme vyhnout konstrukcím jako /retezec?vstup=vstupuživatele.

Jak bylo vidět v předchozím kódu, množina urls je předána při tvorbě objektu app.

Zpracování

Když přijde do aplikace HTTP request, framework se jej pokusí na základě URL přeposlat k určené třídě. Tyto třídy mohou obsahovat metody GET a POST (ta správná se vybere dle metody requestu). Zde je příklad obou metod:

class UmocniVstup():
    # krom parametru self předáme i parametr cislo, který
    # vyjadřuje hodnotu předanou v regexu '/umocni/(d+)'
    GET(self, cislo):
        return cislo * cislo
    POST(self):
        # parametry předávané metodou post můžeme získat
        # pomocí web.input().nazev_vstupu
        cislo = web.input().cislo
        return cislo * cislo

Po vykonání všech akcí metody většinou dochází k zaslání HTTP response obsahujícího stránku, data či HTTP hlášení, zde jsou vypsány některé z možností:

return "Ahoj" # vrací řetězec
return render.uvod # vykreslí šablonu uvod.html
return web.seeother("/") # přesměruje s hlášením 303 na jinou stránku
return web.notfound("Stránka nebyla nalezena") # vrátí hlášení 404 s textem
return web.notfound(render.nenalezeno()) # vrátí hlášení 404 reprezentované danou šablonou

Další metody HTTP hlášení naleznete v dokumentaci http://webpy.org/docs/0.3/api#web.webapi.

Ukázka a spuštění aplikace

Následuje kód ukázkové aplikace, myslím, že není třeba nic vysvětlovat:

# -*- coding=utf-8 -*-
import web

urls = (
    '/','Uvod',
    '/umocni/(\d+)', 'Umocni',
)

app = web.application(urls, globals())

class Uvod:
    def GET(self):
        return "Ahoj"
class Umocni:
    def GET(self, cislo):
        return int(cislo) * int(cislo)

if __name__ == "__main__":
    app.run()

Kód uložte do souboru main.py, nezapomeňte do stejného adresáře vložit i balíček web.py web. Na Windows pak stačí soubor otevřít pomocí Pythonu. Na Linuxu můžete soubor spustit zavoláním příkazu python ./main.py. Po spuštění serveru přejděte do prohlížece na adresu http://localhost:8080 a poté http://localhost:8080/umocni/2.

Aplikace má standardně spuštěný mód debugování, díky tomu se všechny změny na zdrojovém kódu okamžitě projevují na běžící aplikaci. Pokud navíc nastane v kódu nějaká chyba, její podrobný popis se vypíše v okně prohlížeče. Tyto funkce jsou v „ostrém“ provozu z bezpečnostních důvodů nežádoucí, je tedy nutné mód debugování vypnout přidáním kódu web.config.debug = False pod importy knihoven.

Závěr

To je k dnešnímu dílu vše. Příště se budeme věnovat šablonám, které dnes už byly několikrát zmíněny. Povíme si něco o jejich systému, proměnných, cyklech, podmínkách i metodách.

Kód uložte do souboru main.py, nezapomeňte do stejného adresáře vložit i balíček web.py.

Komentáře

Odebírat
Upozornit na
guest
0 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
Zobrazit všechny komentáře

Strategie a AI jako klíč. Do Prahy přijely špičky technologického světa

WebExpo 2025 ukázalo, jak se tvoří budoucnost. Třídenní technologická konference WebExpo 2025 přivedla do Prahy světové i české experty, kteří nabídli inspiraci napříč obory. Hlavním tématem byla propojenost disciplín, význam AI a potřeba otevřenosti vůči novým výzvám – včetně podpory legální imigrace. Ukázalo se, že inovace vznikají nejen v Silicon Valley, ale i tam, kde se nebojíme myslet jinak.

Přístupnost není jen o splnění norem: nový pohled na inkluzivní design

Přístupnost a inkluze možná nepatří mezi nejžhavější témata digitálního světa – dokud o nich nezačne mluvit Vitaly Friedman. Na WebExpo 2024 předvedl, že inkluzivní design není jen o splněných checkboxech, ale hlavně o lidech. S energií sobě vlastní obrátil zažité přístupy naruby a ukázal, že skutečně přístupný web je nejen možný, ale i nezbytný.

Efektivnější vývoj UI nebo API: Co si odnést z WebExpo 2025?

Různé
Komentáře: 0
Jak snadno implementovat moderní uživatelské rozhraní? Které funkce brzdí rychlost vašeho webu? A kdy raději sami přibrzdit, abychom využitím AI nepřekročili etické principy? Debatu aktuálních dev témat rozdmýchá sedmnáctý ročník technologické konference WebExpo, která proběhne v Praze od 28. do 30. května. Který talk či workshop si rozhodně nenechat ujít? Toto je náš redakční výběr z vývojářských hroznů.