Redirija después de POST (patrón PRG)
Evite envíos duplicados mediante una redirección.
Redirija después de POST (patrón PRG) es una lección gratuita de Flask Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Flask Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Flask Academy incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
The Double Submit Problem
After a form post, hitting refresh resends the same data. That can create duplicate orders, comments, or signups. 😬
Why Refresh Repeats
The browser remembers the last request. Reloading a page that was the result of a POST simply fires that POST again.
Meet Post Redirect Get
The fix is the PRG pattern: accept the POST, then redirect the browser to a plain GET page instead of rendering directly.
Process the POST
First do the real work inside the POST branch: save the record, charge the card, whatever the form was for.
if request.method == "POST":
save_comment(request.form["text"])Redirect, Do Not Render
Instead of returning a template, return a redirect. The browser then makes a fresh GET that is safe to refresh.
from flask import redirect
return redirect("/thanks")Build the Target With url_for
Avoid hardcoded paths. Use url_for so the redirect target follows your route names even if URLs change later.
return redirect(url_for("thanks"))The 302 Status
A redirect sends a 302 response telling the browser to go fetch another URL. That second request is the safe GET.
The GET Handler
The target route is an ordinary GET view. It just shows a confirmation page and can be refreshed all day with no side effects.
@app.route("/thanks")
def thanks():
return render_template("thanks.html")Carry a Flash Message
Want to say it worked? Set a one time flash message before redirecting and show it on the destination page.
from flask import flash
flash("Saved!")
return redirect(url_for("thanks"))Redirect on Errors Too
If validation fails, you can flash the problem and redirect back to the form, keeping every path refresh safe.
if errors:
flash("Fix the form")
return redirect(url_for("signup"))The Full PRG View
Process, then redirect. This PRG shape is the standard for any form that changes data on the server.
@app.route("/comment", methods=["POST"])
def comment():
save_comment(request.form["text"])
return redirect(url_for("thanks"))Quick Check
Why does PRG stop those accidental duplicates?
Recap: PRG Pattern
You processed the POST, redirected to a GET with url_for, used flash for messages, and made every refresh safe. 🎉
Preguntas frecuentes
¿La lección «Redirija después de POST (patrón PRG)» es gratis?
Sí — el texto completo de «Redirija después de POST (patrón PRG)» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Flask Academy, actualiza a CoddyKit PRO. El curso de Flask Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Redirija después de POST (patrón PRG)»?
Evite envíos duplicados mediante una redirección. Practicas Flask Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Flask Academy?
No se requiere experiencia previa. Flask Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Redirija después de POST (patrón PRG)»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Flask Academy?
Sí. Cada lección de Flask Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Construya un formulario HTML que envíe datos
- Lea y establezca valores predeterminados para parámetros de consulta
- Valide manualmente los campos obligatorios
- Redirija después de POST (patrón PRG)