Học Python 3 từng bước và dự án mẫu FastAPI

Step-by-step Python 3, then a sample project: the Mini Places API

Từ cài đặt và những dòng code đầu tiên, qua cấu trúc dữ liệu, hàm, lỗi, kiểu dữ liệu, async và test, đến việc xây một API hoàn chỉnh bằng FastAPI. Mỗi bước có code sao chép được, thử thách nhỏ và lỗi thường gặp.

Bắt đầu học PythonXem dự án FastAPI

Lộ trình Cơ bản · Beginner

Hai mươi bước chia thành bốn giai đoạn. Màu xanh dương và vàng là Python, màu xanh ngọc là FastAPI.

Vì sao Python?

Why Python

Cú pháp gần với ngôn ngữ tự nhiên, thư viện chuẩn phong phú, dùng được cho web, dữ liệu, tự động hóa và AI.

Môi trường ảo

Virtual environment

Mỗi dự án có một thư mục thư viện riêng (.venv) để các dự án không giẫm lên nhau.

Vì sao FastAPI?

Why FastAPI

Dùng type hints chuẩn của Python để tự kiểm tra dữ liệu và tự sinh tài liệu API tương tác.

Bản đồ kiểu dữ liệu Core types at a glance

KiểuVí dụCó thứ tựThay đổi đượcCho phép trùng
list[1, 2, 2]CóCóCó
tuple(1, 2)CóKhôngCó
dict{"a": 1}Theo thứ tự thêm vàoCóKhóa không trùng
set{1, 2}KhôngCóKhông
str, int, float, bool"abc", 3str cóKhông-
Mẹo nhớ: tuple và str "đóng băng" sau khi tạo, còn list, dict, set là "bảng trắng" có thể sửa. Khi hai biến cùng trỏ vào một list, sửa ở biến này thì biến kia cũng thay đổi.

Python Step Navigator Tương tác · Interactive

Mười hai bước. Bấm vào từng bước để xem giải thích, code, thử thách và lỗi thường gặp.

Đoán kết quả Predict the output

Đọc code, đoán kết quả, rồi kiểm tra. Luyện đọc code là kỹ năng nền tảng.

Kế hoạch học Study planner

Số giờ mỗi bước chỉ là ước tính tham khảo cho người mới, hãy tự điều chỉnh.

Dự án mẫu: Mini Places API FastAPI

API quản lý địa điểm: thêm, xem, tìm, xóa địa điểm, và một quy trình duyệt dữ liệu nhập vào (pending, approved hoặc rejected). Dữ liệu nhập chưa được duyệt thì không hiện ra API công khai.

Lưu ý: code trong trang được viết theo cách FastAPI, Pydantic v2 và SQLModel được mô tả trong tài liệu, nhưng chưa được chạy kiểm thử ở đây. Hãy chạy từng bước, đọc lỗi và đối chiếu với tài liệu chính thức nếu phiên bản thư viện của bạn khác.

Vòng đời một request Request lifecycle

Kiến trúc các lớp Layered structure of the project

Trạng thái một ứng viên import Import candidate state machine

HTTP, CRUD và mã trạng thái Methods and status codes

Phương thứcDùng đểMã thường trả vềVí dụ trong dự án
GETĐọc200, 404GET /places/1
POSTTạo mới, hoặc thực hiện một hành động201, 409, 422POST /places
PUT / PATCHCập nhật toàn bộ hoặc một phần200, 404, 422Bài tập mở rộng
DELETEXóa204, 404DELETE /places/1

200 thành công, 201 đã tạo, 204 thành công không có nội dung, 404 không tìm thấy, 409 xung đột trạng thái, 422 dữ liệu gửi lên không hợp lệ.

Sân chơi API (mô phỏng) API playground simulation

Đây là mô phỏng chạy ngay trong trình duyệt để bạn thấy mã trạng thái và phản hồi của Mini Places API, không phải server thật. Hãy thử theo thứ tự các nút mẫu, rồi tự sửa.

Chuyên sâu Advanced

Những chủ đề đưa dự án từ bài tập lên mức dùng thật.

def hay async def?

Sync vs async endpoints

Dùng async def khi bên trong bạn await các thư viện bất đồng bộ. Hàm def thường được FastAPI chạy trong thread pool, nên gọi code chặn (blocking) trong def là chấp nhận được. Gọi code chặn bên trong async def sẽ làm đứng cả event loop.

Dependency Injection

Depends

Khai báo thứ endpoint cần (session cơ sở dữ liệu, người dùng hiện tại, tham số phân trang) bằng Depends. Dễ tái sử dụng và dễ thay thế khi test (dependency_overrides).

Cấu hình qua môi trường

Settings

Không ghi cứng chuỗi kết nối hay khóa bí mật. Dùng biến môi trường hoặc file .env với pydantic-settings, và đừng commit file bí mật.

Xác thực

Authentication

Các endpoint /admin/... trong bài mẫu chưa có bảo vệ. Thực tế cần đăng nhập (ví dụ OAuth2 với JWT) và phân quyền để chỉ admin duyệt được dữ liệu.

CORS

Cross-origin requests

Khi frontend ở domain khác, trình duyệt chặn nếu server không cho phép. Chỉ liệt kê những origin cần thiết, tránh dùng dấu * ở môi trường thật.

Migration

Schema changes

create_all phù hợp để học. Khi dữ liệu đã có thật, dùng công cụ migration (ví dụ Alembic) để thay đổi bảng an toàn.

Mã mẫu mở rộng Snippets for the next level

app/config.py

Thêm CORS vào app/main.py

Dockerfile

Trong Dockerfile hãy dùng phiên bản Python mà dự án và các thư viện của bạn hỗ trợ.

Checklist trước khi triển khai Production checklist

Hạng mụcCần làm
Bảo mậtXác thực và phân quyền cho /admin, che khóa bí mật, giới hạn CORS, kiểm tra đầu vào
Dữ liệuChuyển từ SQLite sang cơ sở dữ liệu máy chủ, dùng migration, có sao lưu
Chất lượngTest cho từng endpoint, chạy test tự động trong CI, kiểm tra kiểu dữ liệu
Vận hànhGhi log, theo dõi lỗi, endpoint /health, chạy bằng fastapi run hoặc Uvicorn trong container
Hợp đồng APIĐặt phiên bản, phân trang, mã lỗi thống nhất, tài liệu OpenAPI luôn cập nhật

Bài tập mở rộng Next challenges

PUT/PATCH cập nhật địa điểmLọc theo categoryTìm theo bán kínhĐăng nhập JWT cho /adminNhật ký duyệt (audit)Docker Compose với PostgreSQL

Từ vựng Anh – Việt Vocabulary

Mười sáu thuật ngữ, kèm câu ví dụ.

EnglishTiếng ViệtExample

Mini game: Lập trình viên Python tập sự Review · Ôn tập

Mười câu hỏi. Trả lời đúng được 10 điểm, trả lời đúng liên tiếp được thêm điểm thưởng.