Python Flask to zyskująca na popularności biblioteka do tworzenia aplikacji webowych oraz REST API. W łatwy sposób możemy robić w niej proste strony oraz mikroserwisy. Poniżej napiszemy nasz pierwszy projekt, czyli Hello World z jej użyciem.

Instalacja Python Flask

Zaczniemy od utworzenia wirtualnego środowiska oraz jego aktywacji. W ten sposób będziemy instalować bibliotekę Flask, tak aby była widoczna tylko w jego obszarze.

W konsoli wpisujemy, odpowiednio:

$ python -m venv venv

$ venv/Scripts/activate

Teraz możemy przejść do instalacji biblioteki

$ pip install flask

Minimalny projekt Python Flask

W celu napisania naszego pierwszego programu we Flask, utworzymy plik o nazwie przykładowo run.py.

Na początku importujemy obiekt Flask, za pomocą którego utworzymy naszą pierwszą aplikację:

from flask import Flask

Następnie tworzymy samą aplikację:

app = Flask(__name__)

Przechodzimy do poinformowania Flaska, pod jakim adresem ma wyświetlać jaką treść. W najprostszej postaci wygląda to tak:

@app.route('/')
def home():
    return 'Hello World'

Użyty powyżej dekorator @app.route(‚/’), informuje Flask, że poniżej znajduje się funkcja która odpowiada za wyświetlenie treści pod adresem ‚/’. Jest to strona główna.

Sama funkcja, nazwana u nas home(), musi zwrócić to, co Flask ma wyświetlić dla użytkownika. W tym przypadku jest to bardzo prosty napis – ‚Hello World’.

Zaraz zobaczymy efekty tego kodu. Zanim jednak to nastąpi, musimy zrobić jeszcze 2 rzeczy.

Na końcu, naszego pliku run.py, uruchamiamy aplikację:

if __name__ == '__main__':
    app.run(debug=True)

Natomiast w konsoli, ustawiamy zmienną środowiskową, którą potrzebuje sam Flask, aby aplikacja się uruchomiła.

$ set FLASK_APP=run.py

Zmienna środowiskowa nazywa się FLASK_APP i ustawiamy jej wartość na run.py, czyli tak jak nazywa się nasz plik.

Teraz możemy uruchomić nasz program

$ python run.py

I otrzymamy komunikat podobny do poniższego.

Flask działa, i udostępnia dla użytkownika informację pod adresem: http://127.0.0.1:5000/

Jeżeli teraz odwiedzimy ten adres w naszej przeglądarce, to zobaczymy efekty naszej pracy, czyli nasz Hello World z użyciem Flask.

A całość dotychczasowych kodów wygląda tak:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return 'Hello World'

if __name__ == '__main__':
    app.run(debug=True)

Pamiętamy również o zmiennej środowiskowej set FLASK_APP=run.py

Zabawa z Hello World we Flask

Aby jeszcze przećwiczyć i lepiej zrozumieć działanie i ideę przypisania funkcji pod dane adresy, do naszego kodu możemy dodać 3 inne adresy oraz funkcje.

@app.route('/innastrona')
def innastrona():
    return 'Witam na innej stronie'

Jest to analogiczna funkcja i użyciu dekoratora, tak w przypadku strony głównej. W tym jednak przypadku, strona będzie widoczna pod adresem ‚innastrona’. Po za tym, działanie takie samo.

A teraz nasz adres strony, skonstruujemy z użyciem nawiasów <>. Będzie to informacja, dla Flask, że jest tam przekazywana zmienna. W ten sposób, w momencie kiedy użytkownik odwiedzi adres internetowy z przykładową końcówką /klient/25  ostatnia część zostanie potraktowana jako zmienna.

@app.route('/klient/<numer>')
def klient(numer):
    return f'Klient o numerze {numer} to ...'

I w rezultacie otrzymamy:

I jeszcze spójrzmy jak w analogiczny sposób, możemy zrobić prostą stronę, która dodaje liczby 🙂

Naszym zamiarem jest zrobienie strony o końcówce adresu /dodaj/liczba+liczba, która w rezultacie zwróci użytkownikowi wynik dodawania.

@app.route('/dodaj/<numer1>+<numer2>')
def dodaj(numer1,numer2):
    wynik = int(numer1) + int(numer2)
    return f'Wynik: {wynik}'

I w rezultacie otrzymamy:

Rozbudowa aplikacji flask o index.html

Ostatnią rzeczą jaką zrobimy tym artykule, to pokazanie jak można renderować strony html, czyli po prostu je wyświetlać. Do tej pory flask wyświetlał, dla użytkownika, proste ciągi znaków, które umieszczaliśmy w return. Teraz zawartość unieśmy w osobnym pliku html.

Tworzymy folder o nazwie ‚templates’. Jest to domyślny folder, w którym Flask ‚szuka’ plików html. Katalog ten powinniśmy utworzyć w tym samym katalogu, w którym znajduje się nasz plik ‚run.py’.

Tworzymy plik ‚index.html’. Jest to przykładowa nazwa. Plik tworzymy i umieszczamy w wyżej utworzonym folderze templates.

Natomiast zawartość naszego pliku, wygląda następująco:

<h1> Witam z Index.html </h1>

Następnie modyfikujemy nasz plik run.py, tak aby pod adresem głównym strony, nie zwracał prostego napisu, ale informował Flask, aby wyświetlał zawartość index.html

Importujemy z biblioteki flask, funkcję render_templates:

from flask import Flask, render_template

I zmieniamy naszą funkcję, odpowiadającą za treść na stronie stronie głównej:

@app.route('/')
def home():
    return render_template('index.html')

W ten sposób, całość kodów, które pisaliśmy wygląda następująco:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html', zmienna='Analityk.edu.pl')

@app.route('/innastrona')
def innastrona():
    return 'Witam na innej stronie'

@app.route('/klient/<numer>')
def klient(numer):
    return f'Klient o numerze {numer} to ...'

@app.route('/dodaj/<numer1>+<numer2>')
def dodaj(numer1,numer2):
    wynik = int(numer1) + int(numer2)
    return f'Wynik: {wynik}'

if __name__ == '__main__':
    app.run(debug=True)

A my, jeżeli ponownie uruchomimy naszą stronę, otrzymamy:

Flask vs Django

Jako jej konkurent Flaska, bardzo często podawany jest Django. Jest to jednak inna kategoria wagowa. Django jest frameworkiem, który o wiele szybciej pozwala tworzyć dość złożone serwisy. Posiada w sobie już dobrane przez zespół Django funkcjonalności. Co jest zaletą, ale i powodem, dla którego niektórzy programiści wybierają Flask. Flask jest w porównaniu z Django ‚goły i wesoły’. Mamy do dyspozycji wiele dodatkowych bibliotek, których funkcjonalności porkrywają się z Django, jednak do od naszej decyzji, zależy które i w jaki sposób użyjemy.

Podsumowanie.

Flask jest absolutnie warty spróbowania. I chociaż większość dużych serwisów internetowych, w przypadku Python, powstaje z użyciem Django, to do prostych stron oraz do tworzenia REST API jest on coraz częściej używany. Między innymi ze względu na swoją prostotę oraz przejrzystość.