การรับข้อมูลจากฟอร์ม
เราจะเห็นว่าในขั้นตอนนี้ เมื่อเรากดปุ่ม 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