ติดตั้ง Flask

Flask ใช้ Jinja เป็น HTML templates

Install Flask

สร้าง folder สำหรับโปรเจ็กส์

> mkdir myproject ; cd myproject

สร้างไฟล์ requirements.txt

Flask==2.0.2

พิมพ์คำสั่งตามนี้

python -m venv venv
.\venv\scripts\activate
pip install -r requirements.txt

สร้างไฟล์ app.py หรือชื่ออื่นก็ได้ เช่น hello.py แต่ห้ามชื่อ flask.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

ไฟล์ชื่อ app.py สั่งรัน Flask แบบนี้

flask run

แต่ถ้าไฟล์ชื่ออื่น เช่น ไฟล์ชื่อ hello.py สั่งรันแบบนี้

flask --app hello run

รันแบบ debug –  restarts the server whenever you make changes to the code.

flask run --debug

เปิด browser ไปที่ http://127.0.0.1:5000/

HTML Escaping

from flask import Flask
from markupsafe import escape

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

@app.route("/<name>")
def hello(name):
    return f"Hello, {escape(name)}!"

ไปที่ http://127.0.0.1:5000/jack

จะได้ Hello, jack!

Routing

from flask import Flask
from markupsafe import escape

app = Flask(__name__)

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello_world():
    return 'Hello, World'

@app.route("/<name>")
def hello(name):
    return f"Hello, {escape(name)}!"

Variable Rules

from flask import Flask
from markupsafe import escape

app = Flask(__name__)

@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello_world():
    return 'Hello, World'

@app.route("/<name>")
def hello(name):
    return f"Hello, {escape(name)}!"

@app.route('/user/<username>')
def show_user_profile(username):
    # show the user profile for that user
    return f'User {escape(username)}'

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return f'Post {post_id}'

@app.route('/path/<path:subpath>')
def show_subpath(subpath):
    # show the subpath after /path/
    return f'Subpath {escape(subpath)}'

Converter types:

string(default) accepts any text without a slash
intaccepts positive integers
floataccepts positive floating point values
pathlike string but also accepts slashes
uuidaccepts UUID strings