0Pricing
Flask Academy · Lekcja

Przekierowanie po POST (wzorzec PRG)

Unikaj wielokrotnego wysyłania formularza dzięki przekierowaniu.

Przekierowanie po POST (wzorzec PRG) to bezpłatna lekcja Flask Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Flask Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Flask Academy zawiera 4 lekcji w sumie.

Problem podwójnego wysłania

Po wysłaniu formularza odświeżenie strony powoduje ponowne wysłanie tych samych danych. Może to utworzyć duplicate zamówienia, komentarze lub rejestracje. 😬

Dlaczego odświeżenie powtarza żądanie

Przeglądarka pamięta ostatnie żądanie. Ponowne załadowanie strony będącej wynikiem żądania POST po prostu ponownie wysyła to żądanie POST.

Poznaj schemat Post Redirect Get

Rozwiązaniem jest schemat PRG: należy przyjąć żądanie POST, a następnie przekierować przeglądarkę do zwykłej strony GET zamiast renderować ją bezpośrednio.

Przetwórz żądanie POST

Najpierw należy wykonać właściwą pracę w gałęzi POST: zapisać rekord, obciążyć kartę — cokolwiek, do czego formularz był for.

if request.method == "POST":
    save_comment(request.form["text"])

Przekieruj, nie renderuj

Zamiast zwracać szablon, należy zwrócić redirect. Przeglądarka wykona wtedy nowe żądanie GET, które można bezpiecznie odświeżać.

from flask import redirect
return redirect("/thanks")

Zbuduj cel za pomocą url_for

Należy unikać ścieżek wpisanych na stałe. Używaj url_for, aby cel przekierowania podążał za nazwami tras, nawet jeśli adresy URL zmienią się później.

return redirect(url_for("thanks"))

Status 302

Przekierowanie wysyła odpowiedź 302, informując przeglądarkę, aby pobrała inny adres URL. To drugie żądanie jest bezpiecznym żądaniem GET.

Obsługa GET

Trasa docelowa to zwykły widok GET. Po prostu shows stronę potwierdzenia, którą można odświeżać bez końca bez skutków ubocznych.

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

Przekaż komunikat flash

Chcą Państwo poinformować o powodzeniu operacji? Przed przekierowaniem ustaw jednorazowy komunikat flash i wyświetl go na stronie docelowej.

from flask import flash
flash("Saved!")
return redirect(url_for("thanks"))

Przekierowuj także przy błędach

Jeśli walidacja się nie powiedzie, można przekazać problem za pomocą flash i przekierować użytkownika back do formularza, zachowując bezpieczeństwo odświeżania na każdej ścieżce.

if errors:
    flash("Fix the form")
    return redirect(url_for("signup"))

Pełny widok PRG

Przetwórz, a następnie przekieruj. Ten schemat PRG jest standardem dla każdego formularza, który zmienia dane na serwerze.

@app.route("/comment", methods=["POST"])
def comment():
    save_comment(request.form["text"])
    return redirect(url_for("thanks"))

Szybkie sprawdzenie

Dlaczego PRG zapobiega przypadkowemu tworzeniu duplikatów?

Podsumowanie: schemat PRG

Przetworzyli Państwo żądanie POST, przekierowali do GET za pomocą url_for, użyli flash do komunikatów i sprawili, że każde odświeżenie jest bezpieczne. 🎉

Często zadawane pytania

Czy lekcja „Przekierowanie po POST (wzorzec PRG)” jest bezpłatna?

Tak — pełny tekst „Przekierowanie po POST (wzorzec PRG)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Flask Academy, przejdź na CoddyKit PRO. Kurs Flask Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Przekierowanie po POST (wzorzec PRG)”?

Unikaj wielokrotnego wysyłania formularza dzięki przekierowaniu. Ćwiczysz Flask Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Flask Academy?

Nie wymagamy żadnego doświadczenia. Flask Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Przekierowanie po POST (wzorzec PRG)”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Flask Academy?

Tak. Każda lekcja Flask Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Budowanie formularza HTML wysyłanego metodą POST
  2. Odczytywanie domyślnych parametrów zapytania
  3. Ręczna walidacja wymaganych pól
  4. Przekierowanie po POST (wzorzec PRG)
← Powrót do Flask Academy