Flask คือ python webframe work เรียนรู้ได้ง่าย Flask object ที่ทำการ implement WSGI application และมีประสิทธิภาพ มาเรียนรู้ที่จะเริ่มต้นการพัฒนา ไปดูตัวอย่าง ได้ที่ http://flask.pocoo.org/
ติดตั้ง Flask ด้วย pip
1 2 3 4 5 6 |
$ mkdir Flaskexample1 $ cd Flaskexample1 $ sudo pip3 install virtualenv $ python3 -m virtualenv venv3 $ source venv3/bin/activate $ pip install flask |
Flask application เลือกสร้างได้ สองแบบ
1 สร้าง app.py ด้วยการสร้าง module (ไฟล์ที่มีนามสกุล py) เหมาะกับ application ขนาดเล็ ไม่ได้มีความซับซ้อน
1 2 3 4 5 6 7 8 9 |
/yourapplication yourapplication.py /static style.css /templates layout.html index.html login.html ... |
2 สร้าง app.py ด้วยการสร้าง python package (Directory ที่มีไฟล์ __init__.py)
1 2 3 4 5 6 7 8 9 10 |
/yourapplication /yourapplication __init__.py /static style.css /templates layout.html index.html login.html ... |
มาดูตัวอย่างแบบง่ายๆๆ ก่อนครับ ให้สร้าง python module
1 2 3 4 5 6 |
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" |
วิธีการ Run
1 2 3 |
$ pip install Flask $ FLASK_APP=hello.py flask run * Running on http://localhost:5000/ |
class flask.Flask(import_name, static_path=None, static_url_path=None, static_folder='static', template_folder='templates', instance_path=None, instance_relative_config=False, root_path=None)
import_name จะแทนค่าด้วย __name__
เมื่อมีการเรียก Flask() constructor จะได้รู้ว่าเป็นของ Application อะไร
แต่หากเราได้ประกาศ application ไว้ใน application/app.py
สามารถมีทางเลือกที่จะเรียก Flask contructor ได้ดังนี้
1 2 3 |
$ pip install Flask app = Flask('yourapplication') app = Flask(__name__.split('.')[0]) |
parameter ที่สามารถกำหนดให้แก่ constructor
import_name | ชื่อ application package |
static_url_path | path ของ static file สามารถกำหนดได้แต่หากไม่มีการกำหนดจะใช้ค่า Default คือ static_folder |
static_folder | folder ที่ใช้สำหรับ static file ที่จะใช้สำหรับ static_url_path โดยค่า default คือ static folder ที่ root ของ application |
template_folder | folder ที่ทำหน้าที่เก็บ templatesโดยค่า default คือ templates folder ที่ root application |
root_path | Flask กำหนดให้เอง อัตโนมัติ เพื่อกำหนด root path ของ Application |
คราวนี้ลองมาสร้าง flask app ใน application/__init__.py อ้างอิงโครงสร้างแบบที่ 2 จากด้านบน แต่ การ start application จะมีสร้าง file ใหม่ที่จะใช้สำหรับการ start ชื่อ <code>setup.py</code> ไว้ ดังโครงสร้าง
1 2 3 4 5 6 7 8 9 10 11 12 |
/myapp setup.py /myapp __init__.py views.py /static style.css /templates layout.html index.html login.html ... |
คราวนี้ก็มาสร้าง file ดังนี้
1) file __init__.py สำหรับ flask application
1 2 3 4 |
from flask import Flask app = Flask(__name__) import myapp.views |
2) views.py
1) file views.py สำหรับ กำหนด route
1 2 3 4 5 |
from myapp import app @app.route('/') def index(): return 'Hello World!' |
Circular imports
ในกรณีที่ views.py มีการ import myapp และ ใน __init__.py ก็มีการ import myapp.views แสดงว่า module มีความสัมพันธ์ซึ่งกันและกัน ที่จริงเราไม่ได้ใช้งาน views ที่เรา import เข้ามาใน __init__.py เพียงต้องการที่จะทำให้มั่นใจว่า module จะต้อง import เข้ามา และเราจะวางไว้ ล่างสุดของ file
3 run app
1 2 3 4 5 |
export FLASK_APP=myapp export FLASK_DEBUG=true pip install -e . flask run |
1 2 3 4 5 6 7 |
$ flask run * Serving Flask app "myapp" * Forcing debug mode on * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 451-832-605 |
Flask configuration
สร้าง file config ชื่อว่า config.py โดย เป็นfile ที่ใช้สำหรับการ ตั้งค่า configuration ค่า ตัวแปรใน Config ใช้เป็นอักษรตัวใหญ่
1 2 3 |
DEBUG = True # Turns on debugging features in Flask BCRYPT_LOG_ROUNDS = 12 # Configuration for the Flask-Bcrypt extension MAIL_FROM_EMAIL = "robert@example.com" # For use in application emails |
โหลด config ใน application
1 2 3 4 |
from flask import Flask app = Flask(__name__) app.config.from_object('config') |
Run App
1 2 3 4 5 6 7 |
$ flask run * Serving Flask app "myapp" * Forcing debug mode on * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 451-832-605 |