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

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ů.

Zapřáhněte AI jako nikdy předtím. Květnová konference WebExpo přivítá hvězdy technologického světa

Od 28. do 30. května 2025 promění pražský Palác Lucerna na tři dny technologická konference WebExpo. Na programu je více než 80 přednášek a workshopů od expertů z celého světa. WebExpo tradičně propojuje vývojáře, designéry, marketéry i byznysové lídry a nabízí praktické dovednosti, strategické myšlení a přináší nejnovější trendy nejen v oblasti AI.