Trung cấpcluster

Flask là gì? Hướng dẫn xây dựng web API với Python cho người mới (2026)

8 phút đọc0 lượt xem
#flask là gì#học flask python#flask vs django#tạo api với flask#cài đặt flask

Flask là gì? Hướng dẫn xây dựng web API với Python cho người mới (2026)

Flask là một micro web framework viết bằng Python, được tạo ra bởi Armin Ronacher (Pallets Projects) vào năm 2010. Tính đến năm 2026, Flask 3.x vẫn là một trong những lựa chọn hàng đầu để xây dựng REST API và ứng dụng web nhẹ bằng Python.

Nếu bạn đang tìm hiểu về Python và muốn bước tiếp vào lập trình web, Flask chính là cánh cửa dễ nhất để bắt đầu. Bài viết này sẽ giải thích Flask là gì, cách cài đặt, cách xây dựng REST API đơn giản và so sánh Flask với Django, FastAPI để bạn chọn đúng công cụ.

Flask là gì?

Flask là micro web framework cho Python, nghĩa là một framework web tối giản, linh hoạt. Từ "micro" ở đây không có nghĩa là yếu hay ít tính năng — mà có nghĩa là: core rất nhỏ gọn, chỉ bao gồm những thứ cần thiết nhất, và bạn hoàn toàn tự do thêm những gì bạn cần.

Flask được xây dựng trên nền tảng của hai thư viện:

  • Werkzeug — WSGI toolkit, xử lý request/response và routing
  • Jinja2 — Template engine để render HTML

Flask hoạt động theo mô hình WSGI (Web Server Gateway Interface) — một chuẩn kết nối giữa web server và ứng dụng Python. Đây là mô hình đồng bộ (synchronous) truyền thống, khác với mô hình async của FastAPI.

Nếu bạn chưa biết Python cơ bản, hãy đọc Python là gì? trước khi tiếp tục.

So sánh nhanh: Micro vs Full-stack Framework

Hãy tưởng tượng Django như một khách sạn 5 sao — có đầy đủ nhà hàng, hồ bơi, phòng gym. Flask giống như một căn hộ trống — bạn tự trang trí theo ý mình, chỉ mua những gì thực sự cần. Với những dự án nhỏ đến trung bình, căn hộ trống đó vừa nhẹ, vừa linh hoạt hơn nhiều.

Tại sao Flask phù hợp cho người mới?

Hello World chỉ 5 dòng code

Đây là ứng dụng Flask đơn giản nhất có thể:

# app.py — ứng dụng Flask đầu tiên
from flask import Flask

app = Flask(__name__)  # khởi tạo ứng dụng Flask

@app.route('/')        # định nghĩa URL gốc
def home():
    return 'Chào mừng đến với Flask!'

if __name__ == '__main__':
    app.run(debug=True)  # chạy ở chế độ debug

Chỉ vậy thôi. Không cần file cấu hình phức tạp, không cần hiểu cấu trúc thư mục bắt buộc như Django. Chạy ngay và có kết quả ngay.

5 lý do Flask là lựa chọn tốt cho người mới

  1. Học nhanh — Biết Python cơ bản là đủ để tạo API trong 1-2 ngày
  2. Cấu trúc dự án tự do — Dự án nhỏ chỉ cần 1 file, không cần ép buộc theo khuôn mẫu
  3. Debug dễ dàng — Chế độ debug=True hiển thị lỗi chi tiết ngay trên browser
  4. Tài liệu rõ ràng — Official docs của Flask rất dễ đọc và đầy đủ
  5. Cộng đồng lớn — Hàng triệu câu hỏi trên Stack Overflow, GitHub

Cài đặt Flask và tạo ứng dụng đầu tiên

Yêu cầu

  • Python 3.8 trở lên
  • Terminal (macOS/Linux) hoặc Command Prompt (Windows)

Bước 1: Tạo môi trường ảo

# Tạo thư mục dự án
mkdir my-flask-app
cd my-flask-app

# Tạo môi trường ảo
python -m venv venv

# Kích hoạt môi trường ảo
source venv/bin/activate   # macOS / Linux
venv\Scripts\activate      # Windows

Môi trường ảo giúp tách biệt các gói thư viện giữa các dự án — đây là best practice khi làm Python.

Bước 2: Cài đặt Flask

# Cài Flask
pip install flask

# Kiểm tra phiên bản
flask --version
# Flask 3.x.x

Bước 3: Tạo file app.py và chạy

# app.py — ứng dụng Flask cơ bản
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return '<h1>Xin chào Flask!</h1>'

@app.route('/about')
def about():
    return 'Đây là trang giới thiệu'

if __name__ == '__main__':
    app.run(debug=True)
# Chạy ứng dụng
python app.py
# hoặc
flask run

Mở browser và truy cập http://127.0.0.1:5000 — bạn sẽ thấy "Xin chào Flask!" hiển thị.

Routing và URL trong Flask

Decorator @app.route() là gì?

Routing trong Flask sử dụng decorator @app.route() để kết nối URL với một hàm Python. Khi người dùng truy cập một URL, Flask sẽ gọi hàm tương ứng và trả về kết quả.

from flask import Flask
app = Flask(__name__)

# Route cố định
@app.route('/products')
def product_list():
    return 'Danh sách sản phẩm'

# Route động — nhận tham số kiểu string
@app.route('/articles/<string:slug>')
def get_article(slug):
    return f'Bài viết: {slug}'

# Route động — nhận tham số kiểu integer
@app.route('/products/<int:product_id>')
def get_product(product_id):
    return f'Sản phẩm ID: {product_id}'

Chỉ định HTTP Method

from flask import Flask, request
app = Flask(__name__)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form.get('username')
        return f'Xin chào, {username}!'
    else:
        return 'Trang đăng nhập'

Các kiểu URL variable

KiểuCú phápVí dụ URL
string<string:name>/users/nguyen-van-a
int<int:id>/products/42
float<float:price>/items/9.99
path<path:subpath>/files/img/logo.png

Xây dựng REST API với Flask

Nếu bạn chưa rõ REST API là gì, hãy đọc API là gì? trước. Phần này sẽ hướng dẫn bạn xây dựng một API quản lý người dùng hoàn chỉnh với đầy đủ CRUD (Create, Read, Update, Delete).

# app.py — Flask REST API đầy đủ
from flask import Flask, jsonify, request

app = Flask(__name__)

# Dữ liệu mẫu (thực tế sẽ dùng database)
users = [
    {'id': 1, 'name': 'Nguyen Van A', 'email': 'a@example.com'},
    {'id': 2, 'name': 'Tran Thi B', 'email': 'b@example.com'}
]

@app.route('/api/users', methods=['GET'])
def get_users():
    return jsonify(users)

@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    user = next((u for u in users if u['id'] == user_id), None)
    if user is None:
        return jsonify({'error': 'Không tìm thấy user'}), 404
    return jsonify(user)

@app.route('/api/users', methods=['POST'])
def create_user():
    data = request.get_json()
    if not data or 'name' not in data:
        return jsonify({'error': 'Thiếu thông tin name'}), 400
    new_user = {
        'id': len(users) + 1,
        'name': data['name'],
        'email': data.get('email', '')
    }
    users.append(new_user)
    return jsonify({'message': 'Tạo user thành công', 'user': new_user}), 201

@app.route('/api/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    user = next((u for u in users if u['id'] == user_id), None)
    if user is None:
        return jsonify({'error': 'Không tìm thấy user'}), 404
    data = request.get_json()
    user.update(data)
    return jsonify({'message': 'Cập nhật thành công', 'user': user})

@app.route('/api/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    global users
    original_length = len(users)
    users = [u for u in users if u['id'] != user_id]
    if len(users) == original_length:
        return jsonify({'error': 'Không tìm thấy user'}), 404
    return jsonify({'message': 'Xóa user thành công'})

if __name__ == '__main__':
    app.run(debug=True)

HTTP Status Code thường gặp

CodeÝ nghĩaDùng khi nào
200 OKThành côngGET, PUT, DELETE thành công
201 CreatedTạo thành côngPOST tạo resource mới
400 Bad RequestLỗi requestDữ liệu không hợp lệ
404 Not FoundKhông tìm thấyID không tồn tại
500 Internal Server ErrorLỗi serverLỗi không mong muốn

Flask vs Django vs FastAPI — Nên chọn cái nào?

Tiêu chíFlaskDjangoFastAPI
LoạiMicro frameworkFull-stack frameworkMicro framework
ORM tích hợpKhông (cần extension)Có sẵnKhông (cần SQLAlchemy)
Độ khó họcThấpTrung bình – caoTrung bình
Async mặc địnhKhôngMột phần
Hiệu năngTốtTốtRất cao
Auto API docsKhôngKhôngCó (Swagger)
Phù hợp nhấtNgười mới, microservice, prototypeApp lớn, cần admin panel, CMSAPI hiệu năng cao, type-safe
  • Chọn Flask nếu: bạn mới học web với Python, muốn tạo API đơn giản, cần prototype nhanh
  • Chọn Django nếu: dự án lớn, cần trang admin, làm CMS. Xem thêm Django là gì?
  • Chọn FastAPI nếu: cần API hiệu năng cao, muốn dùng async/await, cần tự động generate API docs

Gợi ý: Bắt đầu với Flask để nắm vững nền tảng, sau đó chuyển sang Django hoặc FastAPI tùy nhu cầu. Xem lộ trình backend 2026 để có kế hoạch học tập chi tiết.

Extension Flask phổ biến

Sức mạnh của Flask nằm ở hệ sinh thái extension phong phú. Bạn chỉ cài thứ bạn cần:

Flask-SQLAlchemy — Kết nối database

pip install flask-sqlalchemy
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

Flask-Login — Quản lý xác thực người dùng

pip install flask-login

Xử lý session, login/logout, bảo vệ các route yêu cầu đăng nhập.

Flask-CORS — Cho phép frontend gọi API

pip install flask-cors
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)
ExtensionChức năng
Flask-SQLAlchemyORM, kết nối database
Flask-MigrateDatabase migration
Flask-LoginAuthentication, session
Flask-CORSCross-Origin Resource Sharing
Flask-JWT-ExtendedJWT token authentication
Flask-WTFForm handling + CSRF protection
Flask-MailGửi email

Deploy ứng dụng Flask

Server tích hợp của Flask chỉ dùng cho phát triển. Trong production, dùng Gunicorn:

# Cài Gunicorn
pip install gunicorn

# Chạy production server
gunicorn -w 4 -b 0.0.0.0:8000 app:app

Deploy lên Render.com (miễn phí)

  1. Tạo file requirements.txt: pip freeze > requirements.txt
  2. Push code lên GitHub
  3. Tạo tài khoản Render.com → New Web Service
  4. Kết nối GitHub repository
  5. Start Command: gunicorn app:app
  6. Deploy — nhận URL public
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "app:app"]

FAQ — Câu hỏi thường gặp về Flask

Flask có phù hợp để làm website thực tế không?

Hoàn toàn phù hợp. Nhiều startup và sản phẩm thực tế dùng Flask cho backend API. Flask đặc biệt mạnh trong microservices, Machine Learning API và backend cho Single Page App. Với traffic lớn, thêm Gunicorn và load balancer là đủ.

Flask khác Django như thế nào?

Flask là micro framework — nhẹ, linh hoạt, bạn tự chọn các thành phần cần dùng. Django là full-stack framework — tích hợp sẵn ORM, admin panel, form validation, authentication. Flask phù hợp cho API đơn giản và người mới; Django phù hợp cho ứng dụng phức tạp. Đọc thêm tại Django là gì?

Học Flask mất bao lâu?

Nếu đã biết Python cơ bản, bạn có thể tạo REST API đơn giản trong 1-2 ngày. Để tự tin làm CRUD API với database, cần khoảng 1-2 tuần. Xem lộ trình học Python 2026 để biết thứ tự học tối ưu.

Flask có hỗ trợ async không?

Flask 2.0+ cho phép dùng async def trong route handler, nhưng hiệu năng async thực sự không cao như FastAPI vì Flask vẫn dựa trên WSGI. Nếu cần async thực sự, hãy xem xét FastAPI hoặc Quart.

Flask có tích hợp database không?

Flask không tích hợp ORM sẵn, nhưng bạn có thể dùng Flask-SQLAlchemy để kết nối PostgreSQL, MySQL, SQLite. Flask-Migrate giúp quản lý migration. Xem Python là gì? để có nền tảng trước khi học SQLAlchemy.

Nên học Flask hay FastAPI trước?

Với người mới, nên học Flask trước. Flask giúp bạn hiểu rõ HTTP, routing, request/response cycle. Sau khi nắm vững Flask, chuyển sang FastAPI sẽ rất dễ. Xem lộ trình backend 2026 để có kế hoạch học tập rõ ràng.

Kết luận

Flask là điểm khởi đầu lý tưởng cho bất kỳ ai muốn học lập trình web với Python. Với thiết kế tối giản, linh hoạt và cộng đồng lớn, Flask cho phép bạn học từng bước mà không bị choáng ngợp.

  • Flask = micro web framework Python, xây trên Werkzeug + Jinja2
  • "Micro" = tự do tùy chỉnh, không phải yếu
  • Hello World chỉ 5 dòng, dễ bắt đầu ngay
  • Routing bằng decorator @app.route()
  • REST API với jsonify()request.get_json()
  • Extension như Flask-SQLAlchemy, Flask-Login giúp mở rộng khi cần
  • Deploy production với Gunicorn trên Render hoặc Railway

Bước tiếp theo

  1. Chạy thử code CRUD API trong bài này trên máy tính của bạn
  2. Thêm Flask-SQLAlchemy để lưu dữ liệu vào database thực
  3. Xem lộ trình học Python 2026
  4. Tham khảo lộ trình backend 2026 cho kế hoạch dài hạn

Về tác giả

Ảnh đại diện tác giả Kenji — họa tiết hình học

Kenji

Kỹ sư phần mềm full-stack (Web), hơn 5 năm kinh nghiệm thực tế

  • Python
  • DB
  • Hạ tầng
  • Đào tạo & cố vấn
  • AI

Làm việc cùng đồng nghiệp người Việt, tôi thấy thiếu tài liệu kỹ thuật rõ ràng bằng tiếng Việt. codeahoc là nơi tôi chia sẻ theo hướng thực tế, dễ áp dụng.

Nguyên tắc nội dung

  • Ưu tiên nguồn gốc và góc nhìn từ thực tế triển khai.
  • Nếu có sai sót, nội dung sẽ được cập nhật và sửa kịp thời.

Khóa học liên quan

100 Days of Code: The Complete Python Pro Bootcamp

Học Python qua 100 dự án thực tế. Phù hợp cho người mới bắt đầu.

4.7
Xem khóa học →

Python for Data Science and Machine Learning Bootcamp

Học Data Science với Python: pandas, matplotlib, scikit-learn.

4.6
Xem khóa học →

Automate the Boring Stuff with Python

Tự động hóa công việc lặp đi lặp lại bằng Python.

4.6
Xem khóa học →

*Đây là liên kết liên kết (affiliate link). Chúng tôi có thể nhận hoa hồng nếu bạn mua khóa học qua liên kết này.