Flask Academy · บทเรียน

เปลี่ยนเส้นทางหลัง POST (รูปแบบ PRG)

หลีกเลี่ยงการส่งข้อมูลซ้ำด้วยการเปลี่ยนเส้นทาง

บทเรียน 4 จาก 413 ขั้นตอน

เปลี่ยนเส้นทางหลัง 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. สร้างแบบฟอร์ม HTML ที่ส่งข้อมูล
  2. อ่านและกำหนดค่าเริ่มต้นพารามิเตอร์คำค้น
  3. ตรวจสอบฟิลด์ที่จำเป็นด้วยตนเอง
  4. เปลี่ยนเส้นทางหลัง POST (รูปแบบ PRG)
← กลับไปที่ Flask Academy