เริ่มสร้าง Flask Application

ก่อนที่จะใช้ Flask เราต้องลง Flask library ใน python ก่อน โดยใช้คำสั่ง pip install Flask หรือ เข้าไปใน

PyCharm -> preferences -> Project -> Project Interpreter

จากนั้นกดเครื่องหมายบวก เพื่อเพิ่ม flask library เข้าไปในลิสต์ของเรา

จะเห็นว่านอกจาก Flask แล้วยังมี module อื่นๆที่มากมายที่มี Flask อยู่ในชื่อ module นั่นคือลิสต์ของ modules ที่คนเขียนมาเพื่อทำงานร่วมกับ flask เช่น module อื่นๆอาจจะมาช่วย Flask ในการสร้างหน้าล็อกอินอย่างรวดเร็ว การสร้างเทมเพลตที่สวยงาม หรือการสร้างบล๊อก

Flask Hello World

Web Application ที่ง่ายที่สุดใน Flask เขียนได้ดังนี้

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

app.run()

ลองสร้างไฟล์ชื่อ app.py แล้วเอาโค้ดไปใส่แล้วรันดู ทดลองเปิด browser ตามลิงค์ที่ปรากฏบน PyCharm เพื่อดูว่า hello world application ของเรารันได้หรือไม่

app = Flask(__name__)

ขั้นแรก เราสร้าง Flask ​object ที่ถูกเก็บไว้ในตัวแปรชื่อ app

argument แรกคือ __name__ (dunder name) คือชื่อของ namespace เวลารันโปรแกรม ถ้าเรารันไฟล์ app.py โดยตรง __name__ จะเท่ากับ __main__ ถ้าไม่ใช่ __name__ จะเป็นชื่อไฟล์หรือชื่อ module ของเรานั่นเอง (__name__ จะเท่ากับ app ถ้าไฟล์ของเราชื่อ app.py)

Flask object คือตัวจัดการ web application ให้กับเรา โดยที่เราสามารถนำ request ที่ผู้ใช้ส่งมาแล้วตอบสนอง request นั้นๆด้วย response ตัวอย่างอยู่ในบรรทัดถัดไปของโค้ด

@app.route("/")
def hello():
    return "Hello World!"

โค้ดส่วนนี้บอก python ว่าเมื่อใดที่ user ใส่ request "/" มาให้ web application server เราจะไปเรียก ฟังก์ชัน hello() ซึ่งจะส่งคำว่า Hello World! กลับไปยัง web browser

เมื่อเราเข้าไปใน web browser แล้วใส่ http://127.0.0.1:5000/ ลงไปใน address bar เราได้ส่ง request "/" ไปให้ web application server เราก็จะเห็น Hello World! ปรากฏอยู่

โค้ดแปลกๆที่เราเห็นใน @app.route("/") อันนี้เค้าเรียกว่า function decorator โค้ดนี้แสดงการใช้ function decorator ในภาษา python

function decorator หรือ function wrapper หมายถึงฟังก์ชั่นหนึ่งที่รับฟังก์ชันอื่นเป็น input เพื่อนำฟังก์ชันนั้นไปใช้หรือไปฝังใน algorithm ภายในฟังก์ชั่น

def func1(func2, var):
  code line 1
  code line 2
  (use func2 somehow...)
  code line 3
  return var

ซึ่งโค้ดข้างบนมันมีค่าเท่ากับโค้ดข้างล่างนี้

@func1(var)
def func2(var1, var2):
  code...

object Flask มี method ที่ชื่อ route() ซึ่งรับตัวแปรสองค่า ตัวแรก route() จะรับฟังก์ชั่น อะไรก็ได้ ในกรณีข้างต้น hello() เป็นฟังก์ชันที่เราใส่ไปเป็น argument แรกของ route

ตัวแปรที่สองคือ "/" คือ request หรือ url path ที่เชื่อมกับฟังก์ชัน hello() เมื่อไหร่ก็ตามที่ server ถูกรีเควสด้วย "/" server จะสั่งให้รันฟังก์ชัน hello()

app.run()

หลังจากเขียนทุกอย่างเสร็จแล้วเราก็บอกให้ Flask รัน web application แล้วเอาไปเสิร์ฟบน web browser

เวลาเรียก app.run() เราสามารถกำหนดได้หลายอย่างเช่นเลขที่ของโฮส (ip address) และเลขของ port เช่นข้างล่าง

app.run(port=8000, host='0.0.0.0')

อีกคำสั่งหนึ่งที่มีประโยชน์คือ

app.run(debug=True)

โดยปกติ เมื่อ server-side application ถูกรันแล้วจะไม่มีการเปลี่ยนแปลงโค้ด ถ้าเรารันแอพลิเคชันไปแล้วแล้วเรามานั่งแก้โค้ด จะไม่มีการเปลี่ยนแปลงเกิดขึ้นบน browser แต่ถ้าเรารันแอพโดยให้ debug=True เท่ากับเราบอก Flask ว่าให้เข้าสู่ debug mode ที่จะคอยเช็คว่าโค้ดของเรามีการเปลี่ยนแปลงอะไรบ้างแล้วก็ refresh server เพื่อให้โค้ดใหม่รันได้