เปลี่ยนเส้นทางหลัง POST (รูปแบบ PRG)
หลีกเลี่ยงการส่งข้อมูลซ้ำด้วยการเปลี่ยนเส้นทาง
เปลี่ยนเส้นทางหลัง POST (รูปแบบ PRG) เป็นบทเรียน Flask Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Flask Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Flask Academy มีบทเรียนทั้งหมด 4 บทเรียน
ปัญหาการส่งซ้ำสองครั้ง
หลังส่งฟอร์ม การกดรีเฟรชจะส่งข้อมูลเดิมซ้ำ ซึ่งอาจสร้างคำสั่งซื้อ ความคิดเห็น หรือการสมัครสมาชิก ซ้ำได้ 😬
เหตุใดการรีเฟรชจึงส่งซ้ำ
เบราว์เซอร์จดจำคำขอล่าสุดไว้ การโหลดหน้าที่เป็นผลลัพธ์จาก POST ใหม่จึงส่ง POST นั้นอีกครั้ง
ทำความรู้จัก Post Redirect Get
วิธีแก้คือรูปแบบ PRG: รับ POST แล้วเปลี่ยนเส้นทางเบราว์เซอร์ไปยังหน้า GET ธรรมดาแทนการแสดงผลโดยตรง
ประมวลผล POST
เริ่มจากทำงานจริงภายในแขนง POST: บันทึกระเบียน เรียกเก็บเงินจากบัตร หรือทำสิ่งที่ฟอร์มมีไว้ เพื่อทำ
if request.method == "POST":
save_comment(request.form["text"])เปลี่ยนเส้นทาง อย่าแสดงผล
แทนที่จะคืนแม่แบบ ให้คืนค่า การเปลี่ยนเส้นทาง จากนั้นเบราว์เซอร์จะส่ง GET ใหม่ที่ปลอดภัยต่อการรีเฟรช
from flask import redirect
return redirect("/thanks")สร้างปลายทางด้วย url_for
หลีกเลี่ยงเส้นทางที่เขียนตายตัว ใช้ url_for เพื่อให้ปลายทางของการเปลี่ยนเส้นทางอ้างอิงตามชื่อเส้นทาง แม้ URL จะเปลี่ยนในภายหลัง
return redirect(url_for("thanks"))สถานะ 302
การเปลี่ยนเส้นทางจะส่งการตอบกลับ 302 เพื่อบอกเบราว์เซอร์ให้ไปดึง URL อื่น คำขอครั้งที่สองนั้นคือ GET ที่ปลอดภัย
ตัวจัดการ GET
เส้นทางปลายทางคือมุมมอง GET ธรรมดา ซึ่งเพียง แสดงหน้ายืนยันและสามารถรีเฟรชได้ตลอดโดยไม่มีผลข้างเคียง
@app.route("/thanks")
def thanks():
return render_template("thanks.html")ส่งข้อความแฟลชไปด้วย
ต้องการแจ้งว่าดำเนินการสำเร็จหรือไม่ ให้ตั้งข้อความ flash แบบใช้ครั้งเดียวก่อนเปลี่ยนเส้นทาง แล้วแสดงข้อความนั้นในหน้าปลายทาง
from flask import flash
flash("Saved!")
return redirect(url_for("thanks"))เปลี่ยนเส้นทางเมื่อเกิดข้อผิดพลาดด้วย
หากการตรวจสอบล้มเหลว คุณสามารถส่งปัญหาแบบแฟลชและเปลี่ยนเส้นทาง กลับไปยังฟอร์ม ทำให้ทุกเส้นทางปลอดภัยต่อการรีเฟรช
if errors:
flash("Fix the form")
return redirect(url_for("signup"))มุมมอง PRG แบบเต็มรูปแบบ
ประมวลผลแล้วเปลี่ยนเส้นทาง รูปแบบ PRG นี้เป็นมาตรฐานสำหรับฟอร์มใด ๆ ที่เปลี่ยนแปลงข้อมูลบนเซิร์ฟเวอร์
@app.route("/comment", methods=["POST"])
def comment():
save_comment(request.form["text"])
return redirect(url_for("thanks"))ตรวจสอบอย่างรวดเร็ว
เหตุใด PRG จึงหยุดการสร้างข้อมูลซ้ำโดยไม่ตั้งใจ
สรุป: รูปแบบ PRG
คุณประมวลผล POST เปลี่ยนเส้นทางไปยัง GET ด้วย url_for ใช้ flash สำหรับข้อความ และทำให้การรีเฟรชทุกครั้งปลอดภัยแล้ว 🎉
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “เปลี่ยนเส้นทางหลัง POST (รูปแบบ PRG)” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เปลี่ยนเส้นทางหลัง POST (รูปแบบ PRG)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Flask Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Flask Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เปลี่ยนเส้นทางหลัง POST (รูปแบบ PRG)”
หลีกเลี่ยงการส่งข้อมูลซ้ำด้วยการเปลี่ยนเส้นทาง คุณปฏิบัติ Flask Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Flask Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Flask Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “เปลี่ยนเส้นทางหลัง POST (รูปแบบ PRG)” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Flask Academy นี้ได้ไหม
ได้ บทเรียน Flask Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สร้างแบบฟอร์ม HTML ที่ส่งข้อมูล
- อ่านและกำหนดค่าเริ่มต้นพารามิเตอร์คำค้น
- ตรวจสอบฟิลด์ที่จำเป็นด้วยตนเอง
- เปลี่ยนเส้นทางหลัง POST (รูปแบบ PRG)