Flask/Grinberg/01 - Nazdárek!

Jak používat klasifikační nálepkuTato stránka je součástí projektu:
Příslušnost: všeobecná


01 - Nazdárek!

editovat

Vše je na GitHubu:

Chceme-li si stáhnout zdrojáky pro určitou kapitolu:

  1. na liště klikneme na 24 releases
  2. jsou označené v0.0v0.23 – to jsou odpovídající čísla kapitol
  3. můžeme si stáhnout příslušné zdrojáky jako .zip anebo .tar.gz

Takže věci pro tuto 01. kapitolu jsou zde:

… a tak podobně i v dalších kapitolách

Nicméně Miguel Grinberg doporučuje, aby si každý příslušné příklady naťukal na klávesnici sám, z didaktických důvodů.

U každého balíčku je MIT licence, která umožňuje tyto zdrojáky volně používat i různě modifikovat – za předpokladu, že tato licence bude všude uváděna. Proto ji uvádíme i zde:

The MIT License (MIT)

Copyright (c) 2017 Miguel Grinberg

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Installing Python

editovat
sudo apt install python3
python3

Installing Flask

editovat
sudo pip3 install flask

Nicméně Ginberg tento přímý způsob instalace do systému nedoporučuje – a to z toho důvodu, že když vyvineme nějakou aplikaci pod jednou verzí a pak upgradujeme flask, že nám pak s tou starou verzí naší aplikace můžeme mít problémy.

Jako řešení navrhuje vyvíjet každou aplikaci v jejím vlastním virtuálním prostředí a teprve v tomto prostředí pak nainstalovat flask a další věci:

python3 python3 -m venv venv
virtualenv venv
source venv/bin/activate
pip3 install flask

Výhoda toho je také ta, že nemusíme mít právo roota, abychom si vše instalovali přímo do operačního systému – vše děláme v našem uživatelském prostoru.

Ovšem nevýhoda toho je, že pro každou aplikaci pak musíme mít nainstalované vše znova, což zabírá místo na disku atd. Proto si to virtuální prostředí prozatím můžeme odpustit. Kdo ale chce, ať postupuje dle Ginbergoav návodu.

A "Hello, World" Flask Application

editovat

Zjistíme, že na vytvoření jednoduché webové aplikace potřebujeme tři soubory v adresářové stuktuře (lomítko na začátku neoznačuje systémový kořen, ale nějaký náš kořenový adresář, ve kterém budeme aplikaci vyvíjet):

  • /mojeaplikace.py
    • /app/__init__.py
    • /app/routes.py


/app/__init__.py

# app/__init__.py: Flask application instance

from flask import Flask

app = Flask(__name__)

from app import routes  # modul routes si vytvoříme hned za malou chvílku; tady ho ale musíme importovat až na konci skriptu, abychom zamezili vzájemným referencím

Tento skript vytváří proměnnou (= aplikační objekt) app jakožto instanci třídy Flask importovanou z nainstalovaného balíku flask. Proměnna __name__ je predefinovanou proměnnou, obsahující jméno modulu, ve kterém je použita. Flask tuto lokaci použije, aby věděl, kde má hledat další soubory k naší aplikaci – šablony atd.

/app/routes.py: Zde si nadefinujeme, co se má zobrazovat na jednotlivých webových stránkách:

from app import app

# @ označuje tzv. dekorátor, modifikující funkci za ním následující – registruje ji jakožto něco
@app.route('/')      # tento dekorátor vyvolá následující view-funkci při požadavku kořenového URL '/'
@app.route('/index') # tento dekorátor vyvolá tu samou funkci, když klient bude chtít '/index'
def index():         # to je tzv. view-funkce, mapovaná do jednoho či více URL
    return "Nazdáreček, hi hej!"

/mojeaplikace.py – soubor v nejvyšším patře našeho adresáře

from app import app  # z balíku app importujeme proměnnou app

(Ginberg zde namísto mojeaplikace.py píše microblog.py, my jsme tu použili obecnější název)

Naše první aplikace je hotová, ale aby flask věděl, kde ji najít, musíme mu nastavit proměnnou:

export FLASK_APP=mojeaplikace.py

Poté už můžeme flask spustit jednoduchým příkazem:

flask run

Flask spustí webový server, který nám naši aplikaci obslouží na portu 5000, takže ji najdeme na URL http://127.0.0.1:5000/ neboli http:localhost:5000/

Při instalaci na produkční web pak aplikace bude čekat na portu 443 (případně 80, pokud nebudeme implementovat šifrování)

Abychom nemuseli při každém sezení znova exportovat FLASK_APP, nainstalujeme si balík:

sudo pip3 install python-dotenv

A pak na vrchol svého adresáře s naší aplikací umístíme soubor: .flaskenv

FLASK_APP=mojeaplikace.py

Ale to asi bude fungovat jen v tom virtuálním prostředí, které jsme se rozhodli nevyužívat.