
Flask là framework web Python nhẹ nhất, cho phép xây dựng ứng dụng web chỉ với vài dòng code. Bài này hướng dẫn từng bước từ cài đặt đến triển khai project Flask hoàn chỉnh, từ cơ bản đến nâng cao, kèm ví dụ thực tế.
Flask Là Gì? Tại Sao Chọn Flask?
Flask là micro-framework theo triết lý “batteries included nhưng tùy chọn”. Khác với Django có sẵn ORM, admin panel, xác thực, Flask cho developer tự chọn thư viện phù hợp:
- Nhẹ nhanh: Core flask ~1000 dòng code, thời gian khởi động dưới 1 giây
- Linh hoạt: Chọn database, template engine, form handling tự do
- Dễ học: Documentation chính thức rõ ràng, ví dụ đầy đủ
- Mở rộng: Hệ thống extension phong phú: Flask-SQLAlchemy, Flask-Login, Flask-WTF
Flask phù hợp cho API REST, microservice, prototype nhanh, và blog cá nhân. Nhiều project lớn sử dụng Flask: Pinterest, LinkedIn, Netflix (một số service). Trang chính thức Flask có tài liệu chi tiết.
So sánh với Django: Django “opinionated” — có sẵn mọi thứ nhưng khó thay đổi cấu trúc. Flask “unopinionated” — bạn xây dựng kiến trúc theo ý muốn, phù hợp khi cần tùy chỉnh sâu hoặc muốn hiểu sâu từng thành phần trong ứng dụng web.
Flask cũng nhẹ hơn FastAPI khi không cần async, nhưng FastAPI vượt trội cho API thuần túy. Chọn Flask khi cần sự đơn giản và kiểm soát toàn bộ stack.
Bài viết này bao quát từ cài đặt cơ bản, cấu trúc project, kết nối database, cho đến triển khai production. Mỗi phần có ví dụ code cụ thể, áp dụng trực tiếp vào project thực tế.

Cài Đặt Flask Trên Linux/macOS/Windows
Khuyến nghị dùng virtual environment để tránh xung đột package:
python3 -m venv venv
source venv/bin/activate # Linux/macOS
venvScriptsactivate # Windows
pip install flask
Kiểm tra: flask --version. Flask 3.x cần Python 3.8+, dùng Werkzeug 3.x, Jinja2 3.x. Trên Windows, dùng py launcher thay python3.
Cần pip version >= 21.3 để hỗ trợ Flask 3.x. Kiểm tra: pip --version. Nếu cũ, upgrade: pip install --upgrade pip. Xem thêm cách cài package Python.
Hello World — Cấu Trúc Project Flask
Tạo file app.py tối thiểu:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello(): return "Xin chào từ Flask!"
if __name__ == "__main__": app.run(debug=True)
Chạy flask run, truy cập http://127.0.0.1:5000. Debug mode tự động reload.
Cấu Trúc Project Flask Cho Production
Project lớn cần tổ chức theo pattern, tránh đặt tất cả code trong một file:
| Thư mục/tệp | Chức năng | Ví dụ |
|---|---|---|
app/__init__.py |
Factory tạo app | Tạo Flask instance |
app/routes/ |
Blueprints | auth.py, main.py |
app/models/ |
Database models | User, Post |
app/templates/ |
Jinja2 templates | base.html |
app/static/ |
CSS/JS/images | style.css |
config.py |
Cấu hình | SECRET_KEY |
Application Factory giúp kiểm thử dễ hơn, tạo app riêng cho từng test case.
Blueprints giúp tổ chức routes theo nhóm chức năng, mỗi blueprint là một module độc lập có routes, templates, static files riêng.

Kết Nối Database Với Flask-SQLAlchemy
Flask không đi kèm ORM, Flask-SQLAlchemy là lựa chọn phổ biến:
pip install flask-sqlalchemy
Model định nghĩa:
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True)
email = db.Column(db.String(120))
Query examples: User.query.all(), User.query.filter_by(username="admin").first().
Migration: pip install flask-migrate, sau đó flask db init/migrate/upgrade. Alembic tạo file migration mô tả thay đổi schema.
Production dùng PostgreSQL hoặc MySQL, không dùng SQLite. SQLite phù hợp cho development.
Triển Khai Flask Lên Server
Không dùng app.run() trong production:
- Gunicorn:
gunicorn -w 4 app:app— WSGI server chuẩn - Nginx reverse proxy: SSL, static files
- Docker: Alpine image ~80MB
Cấu hình production: FLASK_ENV=production, tắt debug, đặt SECRET_KEY từ biến môi trường.
Kết Luận
Flask cho toàn quyền kiến trúc — không framework nào ép bạn. Tài liệu chính thức.
Bắt đầu từ một project đơn giản, dần dần thêm phức tạp: authentication, API endpoints, background tasks. Flask cho bạn sự tự do kiến trúc đó.
Trong khi học Flask, hãy lưu ý: đừng vội vàng vào các extension phức tạp. Trải nghiệm core Flask trước, rồi mới suy nghĩ về SQLAlchemy, WTForms, hoặc các công cụ testing như Pytest.
Flask cũng tích hợp tốt với các service hiện đại: Redis cache, Celery background tasks, WebSocket qua Flask-SocketIO. Hệ sinh thái extension rất phong phú, hầu hết đều do cộng đồng duy trì.
Trong khi học Flask, hãy lưu ý: đừng vội vàng vào các extension phức tạp. Trải nghiệm core Flask trước, rồi mới suy nghĩ về SQLAlchemy, WTForms, hoặc các công cụ testing như Pytest.
