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

Cesta URL: co se děje, než se načte webová stránka

Když do adresního řádku prohlížeče napíšete webovou adresu a stisknete Enter, spustí se fascinující řetězec procesů, které propojují váš počítač s celým světem. Od překladu doménového jména na IP adresu, přes navázání šifrovaného spojení, až po vykreslení každého pixelu na obrazovce - to všechno se odehraje během zlomků sekundy. Pojďme se podívat, co se mezitím děje pod kapotou webu.

Stav SIMD v Rustu v roce 2025

Různé
Komentáře: 1
SIMD - neboli Single Instruction, Multiple Data - znamená, že procesor může jednou instrukcí zpracovat více datových prvků najednou. Typicky to znamená, že místo sčítání dvou čísel přičtete dvě sady čísel paralelně. To může přinést výrazné zrychlení například při zpracování obrazu, audia nebo numerických výpočtů. Pokud již SIMD znáte, tato tabulka je vše, co budete potřebovat. A pokud s SIMD teprve začínáte, tabulku pochopíte do konce tohoto článku