Sau 20 tập, API quản lý chi tiêu cá nhân đã đi từ một project Django trống tới hệ thống hoàn chỉnh: xác thực JWT, phân quyền theo từng user, thống kê, cảnh báo ngân sách, import và export CSV, test bao phủ, chạy trong Docker và deploy lên cloud. Tập cuối này tổng kết hành trình, đưa ra checklist kiểm tra lần cuối và gợi ý hướng phát triển tiếp theo.
Hành trình 20 tập đã đi qua
Tuần 1 đặt nền móng: setup project, models Category, Transaction và Budget, tùy chỉnh admin, seed dữ liệu và test đầu tiên cho models. Tuần 2 xây REST API với DRF: serializers, ViewSets và routers, xác thực JWT, permissions để mỗi user chỉ thấy dữ liệu của chính mình, rồi pagination, filtering và search. Tuần 3 thêm tính năng nâng cao: thống kê bằng annotate và aggregation, cảnh báo vượt ngân sách bằng signals, export và import CSV, tối ưu query với select_related và prefetch_related. Tuần 4 hoàn thiện và deploy: test API bằng APITestCase, Dockerize với PostgreSQL và Redis, task định kỳ bằng Celery và deploy lên Render, Railway hoặc Fly.io.
Checklist trước khi dùng thật
Trước khi dùng hằng ngày, hãy chạy qua checklist sau:
- Tắt DEBUG, đưa SECRET_KEY vào biến môi trường và khai báo ALLOWED_HOSTS đúng domain.
- Chạy toàn bộ test suite và kiểm tra lại phân quyền: user A tuyệt đối không đọc được transaction của user B.
- Bật HTTPS, xoay vòng refresh token JWT và giới hạn tốc độ gọi endpoint đăng nhập.
- Đặt lịch backup database định kỳ và theo dõi log lỗi để phát hiện sự cố sớm.
python manage.py testpython manage.py check --deploydocker compose ps
Hướng phát triển tiếp
Hướng rõ ràng nhất là làm frontend: giao diện React hoặc Vue gọi thẳng API, vẽ biểu đồ chi tiêu theo tháng từ endpoint thống kê của tập 11. Nếu thích mobile, Flutter hoặc React Native đều dùng được JWT sẵn có, chỉ cần lưu refresh token an toàn. Về tính năng, bạn có thể thêm quét hóa đơn bằng OCR, nhắc ngân sách qua push notification mở rộng từ task Celery của tập 18, hoặc chia sẻ ngân sách trong gia đình.
Áp dụng vào dự án của bạn
Đừng ôm cả bốn hướng cùng lúc. Hãy chọn đúng một hướng trong tuần tới, ví dụ trang dashboard hiển thị tổng chi theo danh mục, làm theo từng bước nhỏ: gọi API thống kê, hiển thị bảng, rồi mới vẽ biểu đồ. Mỗi tính năng mới nên đi kèm một test như cách series vẫn làm từ tập 5, để dự án càng lớn càng vững.
Bài viết liên quan
Quản lý chi tiêu với Django #19: Deploy lên Render/Railway/Fly.io
Quản lý chi tiêu với Django #16: Viết test cho API (APITestCase)
Quản lý chi tiêu với Django #11: Thống kê chi tiêu theo tháng và danh mục
Câu hỏi thường gặp
Học xong series thì nên làm gì tiếp theo?
Hãy chọn một hướng phát triển ở trên và làm tới cùng một tính năng hoàn chỉnh, thay vì đọc thêm nhiều tutorial mới. Một tính năng chạy thật dạy bạn nhiều hơn mười bài đọc dở dang.
Có cần học frontend ngay không?
Không bắt buộc. Bạn có thể gọi API bằng Postman hoặc curl để kiểm chứng trước. Học frontend khi thực sự cần giao diện cho người khác dùng, lúc đó API đã sẵn sàng.
Nền tảng deploy miễn phí nào phù hợp nhất?
Render phù hợp để bắt đầu nhanh, Railway tiện khi cần thêm PostgreSQL và Redis, còn Fly.io linh hoạt hơn khi bạn muốn kiểm soát máy chủ. Cả ba đều đã được nhắc trong tập 19.
Thêm tính năng mới mà không phá API cũ bằng cách nào?
Giữ nguyên endpoint cũ và gắn phiên bản vào URL, ví dụ chuyển sang /api/v2/ khi thay đổi response. Viết test cho endpoint cũ trước khi sửa, để test báo ngay nếu bạn vô tình làm vỡ client đang chạy.
Nguồn tham khảo
- Tài liệu Django: https://docs.djangoproject.com/
- Tài liệu Django REST Framework: https://www.django-rest-framework.org/
