การรับข้อมูลจากฟอร์ม

เราจะเห็นว่าในขั้นตอนนี้ เมื่อเรากดปุ่ม submit ข้อความ ยังไม่มีอะไรเกิดขึ้นเพราะเรายังไม่ได้เขียนโค้ดเพื่อบอกให้ web app เรารับค่าอะไรจากผู้ใช้ จะเห็นได้ว่าใน index.html เราไม่ได้เซ็ท action ให้ทำอะไรหลังจากที่ผู้ใช้กด submit

<form id="contact-form" action="", method="POST">

ลองเปลี่ยนโค้ดบรรทัดนี้ให้กลายเป็น

<form id="contact-form" action="{{ url_for('save') }}", method="POST">

แล้วเข้าไปที่ contact.py เติมฟังก์ชันข้างล่างนี้ลงไปก่อนคำสั่ง app.run()

@app.route('/save', methods=['POST'])
def save():
    return "Saved!"

ลองรัน web application แล้วกด submit ดูว่าเกิดอะไรขึ้น

ใน html เราจัดให้ฟอร์มไปเรียก url_for('save') เมื่อผู้ใช้กด submit หมายถึงให้เข้าไปหาฟังก์ชัน save() แล้ว redirect web browser ไปยัง route ของฟังก์ชันนั้น

ใน contact.py เราเซ็ทให้ /save แสดงคำว่า "Saved!" บน browser

จะเห็นว่าในคำสั่ง @app.route('/save', methods=['POST']) เราระบุ methods=['POST'] หมายถึงให้ ฟังก์ชันนี้รับค่าที่ผู้ใช้ใส่มาในฟอร์ม

เก็บข้อมูลจากฟอร์ม

ตอนนี้เราสามารถกรอกฟอร์มได้แล้วและฟอร์มของเราสามารถตอบสนองเมื่อผู้ใช้กดปุ่ม submit แต่ตอนนี้ข้อมูลที่ผู้ใช้กรอกนั้นหายไป

from flask import Flask
from flask import render_template
from flask import request

app = Flask(__name__)

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

@app.route('/save', methods=['POST'])
def save():
    x = dict(request.form.items())
    print(x)
    return "Thank you, your information is saved!"

app.run(debug=True)

ลองเปลี่ยน contact.py ให้เป็นโค้ดดังตัวอย่างข้างบน แล้วรัน application ลองใส่ข้อความเข้าไปในฟอร์มดู

จะเห็นว่าเราสามารถส่งข้อมูลที่ผู้ใช้ใส่กลับเข้ามาใน python ได้ด้วยการใช้ library ที่ชื่อ request

เราสามารถเรียกดูข้อมูลนี้ได้โดยการเรียก request.form.items() ซึ่งเป็นฟังก์ชันใน request object ที่เก็บข้อมูลที่ผู้ใช้กรอกลงฟอร์ม

Other type of request

Flask มี object ที่ชื่อว่า request ที่เอาไว้ประมวลผล request ที่ผู้ใช้หรือ client-side application ส่งมาให้กับ server โดยมันอาจจะมาได้ในหลายรูปแบบ เช่น อาจจะมาจากการกรอกข้อมูลในแบบฟอร์ม อาจจะเป็นไฟล์ที่ถูกอัพโหลดขึ้นมา อาจจะเป็นข้อมูลที่มีโครงสร้างเฉพาะเช่น json หรือ cookie นักศึกษาอาจจะยังไม่ต้องทราบสิ่งเหล่านี้ในขั้นตอนนี้ ถ้าหากต้องการศึกษาเพิ่มเติมลองดู Flask.request documentation