HTML-forms i przesyłanie danych do serwera
Od HTML- formy do zapisanych danych — i dlaczego po zapisaniu potrzebne jest jeszcze jedno zapytanie.
Rozdział 22.2 pokazał HTML- formularz, rozdział 22.5 — trasę, która go obsługuje. Teraz przeanalizujemy tę ścieżkę w całości, z jednym ważnym szczegółem: co robić po tego, jak formularz jest przetworzony.
<form action="{{ url_for('dobavit') }}" method="post">
<label for="zadacha">Новая задача</label>
<input type="text" id="zadacha" name="zadacha" required>
<button type="submit">Добавить</button>
</form>
method="post" mówi przeglądarce o przesłaniu danych formularza jako
treść żądania POST-, a nie jako część adresu. Atrybut name="zadacha"
pole definiuje klucz, pod którym wartość dotrze na serwer.
@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"), code=303)
request.form.get("zadacha", "") odzyskuje wartość pola przez
imię; drugi argument dotyczy tego, co zwrócić, jeśli nie było żadnego pola. Jakie inne sprawdzenia należy wykonać
Dodaj przed zapisaniem wprowadzonej wartości – w sekcji 22.31.
POST-Redirect-GET — po co jest redirect na końcu
Obsługa formularza nie kończy się na renderowaniu strony, lecz na
redirect(url_for("glavnaya"), code=303) – HTTP-odpowiedź z kodem
303 See Other (Rozdział 22.9), który informuje przeglądarkę o adres, z którego należy żądać
wynik używając metody GET. Przeglądarka Yandex wykonuje drugie, teraz bezpieczne żądanie i pokazuje
Page.