Blog JSystems - uwalniamy wiedzę!

Szukaj
Framework Flask - obsługa formularzy

Do obsługi formularza potrzebne będą dwa elementy. Jeden dbający o to co się ma stać gdy wejdziemy na formularz (GET), oraz co się ma stać gdy formularz zatwierdzimy (POST). Funkcja na potrzeby wyświetlenia formularza nie odbiega od wcześniej tworzonych i sprowadza się do wyświetlenia strony html:

Kod w edytorze PyCharm 2025.3 (interpreter Python 3.14)

Kod z powyższego zrzutu (do skopiowania):

@app.route("/addProduct")
def addProduct():
    return render_template("addProduct.html")

Musimy zrobić również formularz w HTML:

Kod w edytorze PyCharm 2025.3 (interpreter Python 3.14)

Kod z powyższego zrzutu (do skopiowania):

<form method="POST">
    <table>
        <tr>
            <td>Nazwa</td>
            <td><input type="text" name="name"/></td>
        </tr>
        <tr>
            <td>Opis</td>
            <td><input type="text" name="desc"/></td>
        </tr>
    </table>
    <input type="submit" value="Wyślij"/>
</form>

Tutaj również nie ma nic nadzwyczajnego, ot zwykły formularz w HTML. Zwróć jednak uwagę na atrybut „name” obu inputów. Po tych właśnie nazwach będziemy odbierać dane na poziomie kontrolera. Ciekawsze rzeczy znajdują się w obsłudze zatwierdzenia formularza:

Kod w edytorze PyCharm 2025.3 (interpreter Python 3.14)

Kod z powyższego zrzutu (do skopiowania):

@app.route("/addProduct", methods=['POST'])
def addProductPost():
    nazwa=request.form['name']
    opis=request.form['desc']
    print(f"nazwa={nazwa}, opis={opis}")
    return render_template("addProduct.html")

Pierwsza różnica ujawnia się w linii 11. Dochodzi nam dodatkowy argument „methods”. Dodajemy go by Flask wiedział kiedy ta funkcja ma zostać wywołana. Domyślną wartością jest „GET”. Dalej dzięki słownikowi „form” zawartym w obiekcie request (który trzeba zaimportować jak wcześniej) odczytuję na podstawie nazw inputów dane z formularza. Dalej (linie 15-16) wyświetlam na konsoli odczytane wartości i ponownie prezentuję formularz.

91.png (338×165)

Konsola:

92.png (571×50)

Szkolenie Python od podstaw, przez analizę danych, do machine learning w JSystems

Ten kurs daje Ci solidne podstawy Pythona. Jeśli chcesz pójść dalej i pod okiem trenera dojść od pierwszej linijki kodu do własnego modelu uczenia maszynowego, sprawdź nasze pięciodniowe szkolenie Python od podstaw, przez analizę danych, do machine learning. Pierwsze trzy dni to Python w praktyce: typy i kolekcje, instrukcje warunkowe i pętle, funkcje, moduły i pakiety, pliki tekstowe, usługi sieciowe oraz praca z bazą PostgreSQL. Czwarty dzień to analiza danych w pandas (wczytywanie CSV, TSV i XLS, filtrowanie, agregacje, statystyki) i wizualizacja w Matplotlib, Seaborn oraz Plotly. Piąty dzień to uczenie maszynowe w scikit-learn: regresja liniowa i logistyczna, drzewa decyzyjne, las losowy, XGBoost, walidacja predykcji, dobór hiperparametrów i przeciwdziałanie przeuczeniu. Szkolenie ma terminy gwarantowane, czyli odbywa się niezależnie od wielkości grupy.

Szkolenie Python od podstaw, przez analizę danych, do machine learning

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Jak obsłużyć formularz we Flasku?
Potrzebne są dwa elementy: obsługa wejścia na formularz metodą GET, która zwykłym render_template wyświetla stronę HTML, oraz obsługa zatwierdzenia formularza metodą POST, która odczytuje przesłane dane. Zwykle wskazuje się je pod tym samym adresem, rozróżniając po metodzie żądania.
Jak we Flasku wskazać, że funkcja obsługuje żądanie POST?
W dekoratorze route dodajemy argument methods z listą zawierającą POST. Domyślną metodą jest GET, więc bez tego argumentu funkcja reagowałaby tylko na wejście na stronę, a nie na zatwierdzenie formularza.
Jak odczytać wartości pól formularza w kontrolerze?
Korzystamy ze słownika form zawartego w obiekcie request, który trzeba wcześniej zaimportować. Dane odczytujemy po nazwach pól, czyli po wartościach atrybutu name z inputów HTML, na przykład request.form z kluczem name lub desc.
Dlaczego atrybut name w polach formularza jest ważny?
To właśnie po nazwach z atrybutu name odbieramy dane na poziomie kontrolera. Jeśli input nie ma nazwy albo nazwa nie zgadza się z kluczem używanym w request.form, nie odczytamy przesłanej wartości.
Czy do wyświetlenia i obsługi formularza wystarczy jeden adres?
Tak, można użyć tego samego adresu dla obu przypadków, rozróżniając je metodą HTTP: GET wyświetla pusty formularz, a POST przetwarza przesłane dane. W przykładzie po odczytaniu wartości ponownie prezentowany jest ten sam formularz.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...