- Published on
Cấu Trúc thư mục dự án fastapi của tôi
- Authors
- Name
- Hoàng Hữu Mạnh
Cấu Trúc Thư Mục Của Project Back End Sử Dụng FastAPI
FastAPI là một framework hiện đại, nhanh chóng (high-performance), dễ học, nhanh để viết code, sẵn sàng cho sản xuất, dựa trên tiêu chuẩn Python 3.6 type hints.
Dưới đây là một ví dụ về cấu trúc thư mục cho một dự án back end sử dụng FastAPI:
Một số thư viện tôi thường dùng trong việc sử dụng fastapi
- pydantic 2.: đây là 1 thư viện validate data của request hay response (từ v2 code bằng rust nên tốc độ khỏ bàn)
- sqlalchemy: đây là thư viện orm
- jinja2: một bộ thư viện giúp render HTML
- poetry: nó giống như npm của node vậy, đôi khi hơi sida trên win
📦myproject
┣ 📂app
┃ ┣ 📂api
┃ ┃ ┣ 📂endpoints
┃ ┃ ┃ ┣ 📜user.py
┃ ┃ ┃ ┗ 📜item.py
┃ ┃ ┗ 📜api.py
┃ ┃ ┗ 📜deps.py
┃ ┣ 📂core
┃ ┃ ┣ 📜config.py
┃ ┃ ┗ 📜security.py
┃ ┣ 📂models
┃ ┃ ┣ 📜user.py
┃ ┃ ┗ 📜item.py
┃ ┣ 📂schemas
┃ ┃ ┣ 📜user.py
┃ ┃ ┗ 📜item.py
┃ ┣ 📂services
┃ ┃ ┣ 📜user_service.py
┃ ┃ ┗ 📜item_service.py
┃ ┣ 📂crud
┃ ┃ ┣ 📜user_crud.py
┃ ┃ ┗ 📜item_crud.py
┃ ┣ 📂services
┃ ┃ ┣ 📜s3_service.py
┃ ┃ ┗ 📜stripe_service.py
┃ ┗ 📜main.py
┣ 📂tests
┃ ┣ 📜test_user.py
┃ ┗ 📜test_item.py
┣ 📜.env
┣ 📜.gitignore
┣ 📜Dockerfile
┣ 📜README.md
┗ 📜requirements.txt
Trong đó:
app
: Thư mục chính chứa mã nguồn của dự án.api
: Chứa các endpoints của API.core
: Chứa các cấu hình cốt lõi của dự án.crud
: Chứa các file nhằm thực thi các câu lệnh create read update delete đối với database thông qua orm.models
: Chứa các models của dự án.schemas
: Chứa các schemas, thường được sử dụng để tạo và kiểm tra dữ liệu đầu vào và đầu ra.services
: Chứa các dịch vụ, thường được sử dụng để xử lý logic nghiệp vụ.tests
: Chứa các test case của dự án..env
: Chứa các biến môi trường.Dockerfile
: Dùng để tạo Docker image.requirements.txt
: Chứa các thư viện Python cần thiết cho dự án.
Cấu trúc thư mục này không cố định và có thể thay đổi tùy theo yêu cầu và quy mô của dự án. [đây là bộ template của tôi đang xây dựng và hoàn thiện] (https://github.com/haiconmeo/fastapi-template-pydanticv2) Nguồn tham khảo: