Redirect efter POST (PRG-mønsteret)
Undgå dobbelte indsendelser med et redirect.
Redirect efter POST (PRG-mønsteret) er en gratis Flask Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Flask Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Flask Academy-kurset indeholder 4 lektioner i alt.
Problemet med dobbelt indsendelse
Efter en formularindsendelse sender et tryk på opdater den samme data igen. Det kan oprette dubletter af ordrer, kommentarer eller tilmeldinger. 😬
Hvorfor opdatering gentager indsendelsen
Browseren husker den seneste forespørgsel. Hvis du genindlæser en side, der var resultatet af en POST, sender den ganske enkelt den samme POST igen.
Mød Post Redirect Get
Løsningen er PRG-mønsteret: Acceptér POST, og omdirigér derefter browseren til en almindelig GET-side i stedet for at rendere siden direkte.
Behandl POST
Udfør først det egentlige arbejde i POST-grenen: Gem posten, hæv beløbet på kortet eller udfør det, formularen var beregnet til.
if request.method == "POST":
save_comment(request.form["text"])Omdirigér, og rendér ikke
I stedet for at returnere en skabelon skal du returnere en omdirigering. Browseren foretager derefter en ny GET, som er sikker at opdatere.
from flask import redirect
return redirect("/thanks")Byg målet med url_for
Undgå hardkodede stier. Brug url_for, så omdirigeringens mål følger dine rutenavne, selv hvis URL'er ændres senere.
return redirect(url_for("thanks"))Status 302
En omdirigering sender et 302-svar, der fortæller browseren, at den skal hente en anden URL. Den anden forespørgsel er den sikre GET.
GET-håndteringen
Målruten er en almindelig GET-visning. Den viser blot en bekræftelsesside, som kan opdateres hele dagen uden bivirkninger.
@app.route("/thanks")
def thanks():
return render_template("thanks.html")Medtag en flash-besked
Vil du fortælle brugeren, at det virkede? Angiv en flash-besked, der kun bruges én gang, før du omdirigerer, og vis den på destinationssiden.
from flask import flash
flash("Saved!")
return redirect(url_for("thanks"))Omdirigér også ved fejl
Hvis valideringen mislykkes, kan du vise problemet med flash og omdirigere tilbage til formularen, så alle forløb er sikre at opdatere.
if errors:
flash("Fix the form")
return redirect(url_for("signup"))Den fulde PRG-visning
Behandl, og omdirigér derefter. Denne PRG-struktur er standarden for enhver formular, der ændrer data på serveren.
@app.route("/comment", methods=["POST"])
def comment():
save_comment(request.form["text"])
return redirect(url_for("thanks"))Hurtigt tjek
Hvorfor stopper PRG disse utilsigtede dubletter?
Opsummering: PRG-mønsteret
Du behandlede POST, omdirigerede til en GET med url_for, brugte flash til beskeder og gjorde enhver opdatering sikker. 🎉
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Redirect efter POST (PRG-mønsteret)” gratis?
Ja — hele teksten til “Redirect efter POST (PRG-mønsteret)” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Flask Academy-kurset, skal du opgradere til CoddyKit PRO. Flask Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Redirect efter POST (PRG-mønsteret)”?
Undgå dobbelte indsendelser med et redirect. Du øver dig i Flask Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Flask Academy?
Der kræves ingen tidligere erfaring. Flask Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Redirect efter POST (PRG-mønsteret)”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Flask Academy-lektion?
Ja. Alle Flask Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Byg en HTML-formular, der sender POST
- Læs og angiv standardværdier for query-parametre
- Validér obligatoriske felter manuelt
- Redirect efter POST (PRG-mønsteret)