Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.

1/1

Python jako motor webu

Tento návod si klade za cíl ukázat jak lze na Hrochovi zveřejnit aplikace napsané v našem oblíbeném jazyce Python. Při výuce používáme framework Flask, proto všechny zde uvedené příklady používají tento framework. Pokud používáte jiný framework stačí si návod maličko modifikovat.

Na Hrochovi je pro webové stránky použit Pyhon 3.

Obsah:

  1. Instalace modulů a virtuální prostředí
  2. Python (WSGI) aplikace na Hrochovi
  3. Vývoj aplikace

Instalace modulů a virtuální prostředí

Při vývoji aplikací je velice často potřeba nainstalovat nějaký Python modul, který není běžnou součástí systému nebo není v systému dostupná požadovaná verze. Doporučovanou cestou pro instalaci modulů pro Python je pip v kombinaci s venv.

pip je správce modulů, který umožňuje nejen jejich instalaci, ale také jejich celkovou správu (odinstalace, upgrade, správa verzí). venv je virtuální prostředí, které je oddělené od zbytku systému.

Vytvoříte si virtuální prostředí právě pro svou aplikaci a pomocí pip si nainstalujete moduly potřebné právě pro tuto aplikaci. Ve své aplikaci si potom aktivujete právě toto své virtuální prostředí, kde je nainstalováno právě to, co potřebujete.

Virtuální prostředí vytvoříme příkazem:

pyvenv vjmeno

vjmeno je jméno virtuálního prostředí a také jméno adresáře, do kterého se nainstaluje.

Virtuální prostředí je třeba aktivovat:

source vjmeno/bin/activate

Deaktivuje se pomocí příkazu deactivate.

Pokud se nacházíte v aktivovaném prostředí spouští se Python a jeho moduly právě z tohoto prostředí. Porovnejte si výstupy následujících příkazů v aktivovaném/deaktivovaném virtuálním prostředí.

type python
type pip

Python (WSGI) aplikace na Hrochovi

Pro Python aplikace je určen adresář ~/public_python respektive soubor app.wsgi v tomto adresáři. Nejprve je třeba nastavit správně přístupová práva:

hroch$ chmod 711 ~
hroch$ chmod 755 ~/public_python

případně:

hroch$ chmod -R a+rX ~/public_python

Vaše webová aplikace by měla být napsána jako Python modul. To znamená, že bude v jednom souboru, nebo v jednom adresáři. V to případě se modul jmenuje pokus. Adresářová struktura může vypadat například takto:

public_python/                        public_python/
    ├── activate_this.py                  ├── activate_this.py 
    ├── app.wsgi                          ├── app.wsgi
    ├── pokus/                            ├── pokus.py
    │   ├── static/                       ├── static/
    │   │   ├── favico.png                │   ├── favico.png
    │   │   └── styles.css                │   └── styles.css
    │   ├── templates/                    ├── templates/
    │   │   └── base.html                 │   ├── base.html
    │   ├── __init__.py                   │   └── views.py
    │   └── views.py                      │ 
    └── vjmeno/                           └── vjmeno/         
        ├── .../                              ├── .../      
        │   ├── ...                           │   ├── ...   
        │   └── ...                           │   └── ...   
        └── ...                               └── ...
vjmeno:
Adresář virtuálního prostředí.
pokus:
Modul s webovou aplikací aplikací. Může to být adresář nebo jen jediný soubor.
activate_this.py:
Pomůcka pro aktivaci virtuálního prostředí.
app.wsgi
Pojmenování tohoto souboru je závazné, protože tento soubor hledá webový server. Obsah souboru app.wsgi závisí na konkrétním Frameworku. Pro nás je klíčoví řádek 4, kde je potřeba zadat jméno (cestu) virtuálního prostředí. Dále jsou klíčové poslední dva řádky: do proměnné application (jméno je závazné) přiřadíme aplikaci z našeho modulu. Vše ostatní řeší aktivaci virtuálního prostředí.
   1 import os
   2 import sys
   3 
   4 VENVNEME = 'vjmeno'
   5 
   6 DIR = os.path.dirname(__file__)
   7 if DIR == '':
   8     DIR = '.'
   9 VENV = os.path.join(DIR, VENVNEME)
  10 THIS = os.path.join(VENV, 'bin/activate_this.py')
  11 activate = os.path.join(DIR, 'activate_this.py')
  12 exec(open(activate).read(), {'__file__': THIS})
  13 
  14 sys.path.insert(0, DIR)
  15 
  16 import pokus
  17 application = pokus.app

`--> stáhnout

Svou aplikaci naleznete na adrese http://hroch.spseol.cz/~LOGIN/pyapp/. (Místo LOGIN uveďte prosím své uživatelské jméno :-)

Můžete se podívat také na:

V Linuxu:

V Linuxu lze pro instalaci Python modulů použít balíčkovací systém dané Linuxové distribuce. Většinou tedy stačí najít balíček s příslušným modulem. Například python-flask nebo python-bottle. I pro instalaci pip bude pravděpodobně existovat balíček python-pip (v různých distribucích se mohou jména balíčků lišit).

Zároveň lze použít i postup popsaný pro Windows, ale není vždy bezpečné provádět instalaci přímo do systému a míchat tak distribuční a stažené moduly.

Ve Windows:

Pokud používáte pythonxy měl by být pip již nainstalován. Pokud ne, stáhnete instalační skript get-pip.py a poté ho v příkazové řádce spustíte:

python get-pip.py

Detaily nejen instalace naleznete na webových stránkách projektu https://pip.pypa.io.

Nyní už můžete instalovat moduly. Například:

pip install Jinja2
pip install Flask
pip install bottle

Je myslím dobré poznamenat, že existuje nástroj virtualenv, který umožňuje vytvořit si pro každý projet vlastní Python prostředí a nainstalovat si potřebné moduly pouze do tohoto prostředí bez zásahu do sytému:

Vývoj aplikace

Vývoj aplikace probíhá většinou přímo na vašem desktopu. Existuje poměně velké množství frameworků pro vývoj webových aplikací. V tomto textu se omezíme na Bottle a Flask. Bottle je maximálně jednoduchý dá se zvládnou za pár hodin. Já bych si dovolil doporučit Flask, který je myslím ideálním kompromisem mezi jednoduchostí a komplexností.

Nabízím zde malou pokusnou aplikaci pro Bottle a pokusnou aplikaci pro Flask. V příkazové řádce zadáte

python pokus.py

Měl by se spustit malý vývojový webový server, který bude přístupný na adrese http://localhost:8080/ případně http://127.0.0.1:8080/. Stačí zadat adresu do prohlížeče a můžete testovat. Pozor! Pokud necháte zapnuty reloader=True a uděláte v kódu syntaktickou chybu vývojový server bude ukončen s chybovým hlášením a třeba jej znovu spustit.

| navigace |

Licence Creative Commons Valid XHTML 1.0 Strict Valid CSS! Antispam.er.cz Blog: Tlapicka.net