Pierwsza aplikacja webowa na Flask
Flask — lekki framework webowy do tworzenia aplikacji webowych w Python.
Flask jest lekkim frameworkiem webowym do tworzenia aplikacji webowych w tym języku Python. Zapewnia routing, obiekty żądań i odpowiedzi, pracując z szablonami Jinja oraz innych podstawowych narzędzi wymaganych przez aplikację serwerową. Sam Flask nie akceptuje Bezpośrednie połączenia sieciowe – obsługiwane przez osobny serwer (Rozdział 22.19 to wyjaśnia granicy w bardziej szczegółowym zakresie); podczas lokalnego działania Flask tymczasowo przejmuje tę rolę poprzez Wbudowany Werkzeug. instalacja serwera deweloperskiego — jak każda biblioteka:
pip install flask
Najmniejszy Flask-app
from flask import Flask
app = Flask(__name__)
@app.route("/")
def glavnaya():
return „Witaj, świecie!”
if __name__ == "__main__":
app.run(debug=True)
@app.route("/") rejestruje trasę: łączy adres / z funkcją glavnaya(), który obsługuje zapytanie na ten adres i generuje odpowiedź. Ten mechanizm jest szczegółowo omówiony w sekcji 22.11.Szablony – HTML z wyrażeniami Jinja
Zwracanie HTML bezpośrednio jako łańcuch znaków w Python jest niewygodne. Flask używa silnika szablonowego
Jinja (sekcja 22.12 omawia go szczegółowo) — to osobny język
szablonów ze swoją składnią: zwykły plik HTML-, do którego można wstawiać wyrażenia i
konstrukcje sterujące Jinja w nawiasach klamrowych
{{ }}:
<h1>Мой список задач</h1>
<ul>
{% for zadacha in zadachi %}
<li>{{ zadacha }}</li>
{% endfor %}
</ul>
from flask import Flask, render_template
app = Flask(__name__)
zadachi = [„Naucz się podstaw Python”, „Zbudować stronę na Flask”]
@app.route("/")
def glavnaya():
return render_template("index.html", zadachi=zadachi)
Adresy dynamiczne
Część adresu można zamienić w parametr trasowania — Flask przekazuje jego wartość jako argument funkcji-obslugi:
@app.route("/privet/<imya>")
def privet(imya):
return render_template("privet.html", imya=imya)
/privet/Сергейwejdziesz do imya linia "Сергей" to część adresu Flask przekazuje funkcji obsługiwającej jako argument.
Akceptuj dane z formularza
Aby użytkownik mógł coś wysłać na serwer (np. dodać zadanie), używana jest forma HTML- i trasa przyjmująca metodę POST
(dlaczego POST, a nie GET znajduje się w sekcji 22.13):
from flask import request, redirect, url_for
@app.route("/dobavit", methods=["POST"])
def dobavit():
novaya_zadacha = request.form.get("zadacha", "").strip()
if novaya_zadacha:
zadachi.append(novaya_zadacha)
return redirect(url_for("glavnaya"))
Ministrona z gotową listą zadań
Trasy, szablony, formularz i statyczny plik CSS z tej sekcji zostały zebrane w gotową mini-stronę „Lista zadań”:
projects/flask/todo-app/app.py
python app.py w terminalu wewnątrz projects/flask/todo-app/, następnie otwórz http://127.0.0.1:5000/ w przeglądarce. W ten sposób uruchamia się serwer deweloperski; czym różni się od środowiska produkcyjnego — w sekcji 22.34.Obecnie zadania są przechowywane w zwykłej liście Python i znikają po ponownym uruchomieniu programu — dlaczego to problem, wyjaśnia rozdział 22.20, a rozdziały 22.20-22.29 stopniowo zastąpią lista bazą danych SQLite.
Dodaj wiersz do index.html pokazujący łączną liczbę zadań: {{ zadachi| length }}.
Dodaj trasę /udalit/<int:indeks>, która usuwa zadanie według jego numeru w liście i przekierowuje na stronę główną.