TetMart Core là hệ thống web thương mại điện tử mini chuyên cung cấp các sản phẩm trang trí Tết. Dự án được xây dựng bằng Django với kiến trúc module hóa, phục vụ mục đích học tập và phát triển thực tế theo mô hình backend – frontend.
Hệ thống bao gồm hai nhóm người dùng chính:
- Người dùng: xem sản phẩm, đăng ký, đăng nhập, thêm giỏ hàng và đặt hàng
- Quản trị viên: quản lý sản phẩm, đơn hàng và theo dõi báo cáo thống kê
Dự án được thiết kế theo hướng dễ mở rộng, rõ ràng về cấu trúc và phù hợp với workflow làm việc nhóm.
- Đăng ký, đăng nhập, đăng xuất
- Xem danh sách sản phẩm
- Xem chi tiết sản phẩm
- Thêm sản phẩm vào giỏ hàng
- Đặt hàng
- Dashboard tổng quan
- Quản lý sản phẩm
- Quản lý đơn hàng
- Cập nhật trạng thái đơn hàng
- Thống kê và báo cáo doanh thu
- Python
- Django
- HTML, CSS
- Bootstrap
- JavaScript
- MySQL
- Django
- PyMySQL
- Pillow
- python-dotenv
TetMart-Core/ ├── products/ ├── orders/ ├── users/ ├── templates/ ├── static/ ├── tetmart/
Luồng hoạt động:
User → View → Model → Database
Website bán sản phẩm trang trí Tết
- 1. Tổng quan dự án
- 2. Mục tiêu hệ thống
- 3. Công nghệ sử dụng
- 4. Kiến trúc tổng thể
- 5. Cấu trúc thư mục
- 6. Chức năng chính
- 6.3. Chat Box hỗ trợ khách hàng
- 7. Luồng xử lý nghiệp vụ
- 8. Thiết kế dữ liệu
- 9. Cài đặt và chạy dự án
- 10. Cấu hình môi trường
- 11. Quy ước phát triển
- 12. Hướng phát triển tiếp theo
- 13. Thành viên thực hiện
TetMart Core là hệ thống web thương mại điện tử mini chuyên cung cấp các sản phẩm trang trí Tết như đèn lồng, bao lì xì, vật phẩm trang trí, phụ kiện ngày Tết và các sản phẩm liên quan.
Dự án được xây dựng bằng Django theo hướng module hóa, dễ bảo trì và phù hợp với quy trình phát triển phần mềm thực tế. Hệ thống hỗ trợ hai nhóm người dùng chính:
- Khách hàng: xem sản phẩm, tìm kiếm, thêm giỏ hàng, đặt hàng, quản lý tài khoản và theo dõi đơn hàng.
- Quản trị viên / nhân sự nội bộ: quản lý sản phẩm, đơn hàng, khách hàng, phân quyền và xem báo cáo thống kê.
TetMart Core được phát triển với các mục tiêu chính:
- Xây dựng một website thương mại điện tử có đầy đủ luồng mua hàng cơ bản.
- Tách rõ logic theo từng module nghiệp vụ như sản phẩm, người dùng, giỏ hàng, đơn hàng và dashboard.
- Áp dụng mô hình MVC/MVT của Django để quản lý dữ liệu, xử lý nghiệp vụ và hiển thị giao diện.
- Hỗ trợ phân quyền quản trị để kiểm soát quyền truy cập từng khu vực trong dashboard.
- Thiết kế code dễ mở rộng cho các tính năng nâng cao như thanh toán online, quản lý tồn kho, API, thống kê nâng cao.
- Python
- Django
- HTML, CSS
- Bootstrap
- JavaScript
- MySQL
- Django
- PyMySQL
- Pillow
- python-dotenv
TetMart-Core/ ├── products/ ├── orders/ ├── users/ ├── templates/ ├── static/ ├── tetmart/
Luồng hoạt động:
User → View → Model → Database
- Python: ngôn ngữ lập trình chính.
- Django: framework backend theo mô hình MVT.
- Django Authentication: xử lý đăng ký, đăng nhập, đăng xuất và phân quyền.
- Django ORM: thao tác với cơ sở dữ liệu thông qua model.
- HTML5
- CSS3
- Bootstrap
- JavaScript
- Django Template Engine
- MySQL: lưu trữ dữ liệu người dùng, sản phẩm, đơn hàng và chi tiết đơn hàng.
DjangoPyMySQLPillowpython-dotenv
Dự án sử dụng kiến trúc Django MVT:
Client Browser
|
v
URL Dispatcher
|
v
View / Business Logic
|
v
Model / ORM
|
v
MySQL Database
|
v
Template Response
Trong đó:
- URL Dispatcher định tuyến request đến view tương ứng.
- View xử lý logic nghiệp vụ, kiểm tra quyền, truy vấn dữ liệu và trả về template.
- Model định nghĩa cấu trúc dữ liệu và quan hệ bảng.
- Template hiển thị dữ liệu ra giao diện người dùng.
- Session được dùng để lưu giỏ hàng tạm thời trước khi tạo đơn hàng.
TetMart-Core/
├── apps/
│ ├── cart/ # Xử lý giỏ hàng bằng session
│ └── dashboard/ # Một số chức năng dashboard mở rộng
├── orders/ # Quản lý đặt hàng, checkout, lịch sử đơn hàng
├── products/ # Quản lý danh mục, sản phẩm, trang sản phẩm
├── users/ # Người dùng, đăng ký, đăng nhập, tài khoản cá nhân
├── static/ # CSS, JavaScript, hình ảnh tĩnh
├── templates/ # Giao diện HTML dùng Django Template
├── tetmart/ # Cấu hình project Django
│ ├── settings.py
│ ├── urls.py
│ └── permission_utils.py # Helper kiểm tra phân quyền dashboard
├── database_backup.sql # File backup database mẫu
├── manage.py # Django management command
├── requirements.txt # Danh sách dependencies
└── README.md
- Đăng ký tài khoản mới.
- Đăng nhập / đăng xuất.
- Tự động đăng nhập sau khi đăng ký thành công.
- Cập nhật thông tin cá nhân:
- Họ tên
- Số điện thoại
- Địa chỉ giao hàng
- Ảnh đại diện
- Mật khẩu
- Xem danh sách sản phẩm đang hoạt động.
- Xem chi tiết sản phẩm theo
slug. - Tìm kiếm sản phẩm theo tên.
- Lọc sản phẩm theo danh mục.
- Lọc theo khoảng giá.
- Sắp xếp theo sản phẩm mới nhất, giá tăng dần hoặc giá giảm dần.
- Thêm sản phẩm vào giỏ hàng.
- Cập nhật số lượng sản phẩm.
- Xóa sản phẩm khỏi giỏ hàng.
- Xóa toàn bộ giỏ hàng.
- Tính tổng số lượng và tổng tiền.
- Lưu giỏ hàng bằng Django session.
- Mua ngay một sản phẩm.
- Checkout từ giỏ hàng.
- Tạo đơn hàng và chi tiết đơn hàng.
- Thanh toán khi nhận hàng (COD).
- Xem lịch sử đơn hàng.
- Hủy đơn hàng khi đơn còn ở trạng thái cho phép.
- Đặt lại đơn hàng đã hoàn thành hoặc đã hủy.
- Tổng số đơn hàng.
- Tổng số sản phẩm.
- Tổng doanh thu từ các đơn hoàn thành.
- Thống kê đơn hàng theo trạng thái:
- Đơn mới
- Chờ xử lý
- Đang giao
- Hoàn thành
- Đã hủy
- Hiển thị các đơn hàng gần nhất.
- Xem danh sách sản phẩm.
- Tìm kiếm sản phẩm theo tên, slug hoặc mã sản phẩm.
- Lọc theo danh mục.
- Lọc theo trạng thái còn hàng / hết hàng.
- Sắp xếp theo thời gian hoặc giá.
- Thêm sản phẩm mới.
- Cập nhật thông tin sản phẩm.
- Tự động tạo
slugtừ tên sản phẩm. - Xóa sản phẩm.
- Xem danh sách đơn hàng.
- Tìm kiếm theo mã đơn hàng, tên khách hàng hoặc số điện thoại.
- Lọc theo trạng thái đơn hàng.
- Xem chi tiết đơn hàng.
- Cập nhật trạng thái đơn hàng.
- Xem danh sách khách hàng.
- Tìm kiếm theo tên đăng nhập, email hoặc số điện thoại.
- Thống kê số đơn và tổng chi tiêu của từng khách hàng.
- Phân loại khách hàng theo trạng thái:
- Mới
- Đang hoạt động
- VIP
- Không hoạt động
- Xem doanh thu theo khoảng ngày.
- Thống kê số đơn hoàn thành.
- Tính tỷ lệ hủy đơn.
- Thống kê doanh thu theo ngày.
- Thống kê số đơn theo ngày.
- Thống kê doanh thu theo danh mục.
- Hiển thị top sản phẩm bán chạy.
Hệ thống có lớp kiểm tra quyền riêng trong permission_utils.py, hỗ trợ điều hướng người dùng đến dashboard phù hợp với quyền hiện có.
Các nhóm quyền chính:
- Quyền xem dashboard.
- Quyền quản lý đơn hàng.
- Quyền quản lý khách hàng.
- Quyền quản lý sản phẩm.
- Quyền xem báo cáo.
- Quyền quản lý phân quyền.
Hệ thống tích hợp Tawk.to để cung cấp chat box trực tuyến giữa khách hàng và quản trị viên.
- Chat box được nhúng trực tiếp vào giao diện website thông qua script của Tawk.to.
- Khách hàng có thể gửi tin nhắn hỗ trợ ngay trên website.
- Quản trị viên tiếp nhận và phản hồi tin nhắn thông qua dashboard của Tawk.to.
- Không cần xây dựng backend chat riêng, giúp giảm độ phức tạp hệ thống và triển khai nhanh hơn.
Người dùng nhập form
|
v
Django Form validate dữ liệu
|
v
Tạo User / xác thực User
|
v
Đăng nhập vào hệ thống
|
v
Điều hướng về trang chủ hoặc dashboard phù hợp
Khách hàng chọn sản phẩm
|
v
Gửi request POST đến cart/add
|
v
Lấy sản phẩm từ database
|
v
Lưu hoặc cập nhật sản phẩm trong session cart
|
v
Trả về số lượng sản phẩm hiện có trong giỏ
Khách hàng mở trang checkout
|
v
Hệ thống đọc cart từ session
|
v
Truy vấn sản phẩm tương ứng trong database
|
v
Tính tổng số lượng và tổng tiền
|
v
Hiển thị form xác nhận thông tin giao hàng
Khách hàng xác nhận đặt hàng
|
v
Tạo Order với trạng thái mặc định: new
|
v
Tạo các OrderItem tương ứng
|
v
Tính tổng giá trị đơn hàng
|
v
Lưu đơn hàng
|
v
Xóa dữ liệu giỏ hàng / checkout session
|
v
Chuyển đến trang đơn hàng của tôi
Admin truy cập danh sách đơn hàng
|
v
Hệ thống kiểm tra quyền orders.view_order
|
v
Admin xem chi tiết đơn hàng
|
v
Nếu có quyền orders.update_order_status
|
v
Admin cập nhật trạng thái đơn
|
v
Lưu trạng thái mới vào database
Model User kế thừa từ AbstractUser và mở rộng thêm các trường:
| Trường | Ý nghĩa |
|---|---|
phone |
Số điện thoại |
address |
Địa chỉ giao hàng |
avatar |
Ảnh đại diện |
is_customer |
Đánh dấu tài khoản là khách hàng |
| Trường | Ý nghĩa |
|---|---|
name |
Tên danh mục |
slug |
Đường dẫn SEO duy nhất |
| Trường | Ý nghĩa |
|---|---|
category |
Danh mục sản phẩm |
name |
Tên sản phẩm |
slug |
Đường dẫn SEO duy nhất |
image |
Ảnh sản phẩm |
description |
Mô tả sản phẩm |
price |
Giá bán |
stock |
Số lượng tồn kho |
is_active |
Trạng thái đang bán |
created_at |
Ngày tạo |
| Trường | Ý nghĩa |
|---|---|
user |
Người đặt hàng |
full_name |
Họ tên người nhận |
phone |
Số điện thoại nhận hàng |
address |
Địa chỉ giao hàng |
note |
Ghi chú |
total_price |
Tổng giá trị đơn hàng |
status |
Trạng thái đơn hàng |
created_at |
Ngày đặt hàng |
Trạng thái đơn hàng:
| Mã trạng thái | Ý nghĩa |
|---|---|
new |
Đơn mới |
pending |
Chờ xử lý |
shipping |
Đang giao |
completed |
Hoàn thành |
cancelled |
Đã hủy |
| Trường | Ý nghĩa |
|---|---|
order |
Đơn hàng cha |
product |
Sản phẩm được mua |
price |
Giá sản phẩm tại thời điểm mua |
quantity |
Số lượng mua |
total |
Thành tiền của dòng sản phẩm |
git clone https://github.com/sonle-dev/TetMart-Core.git
cd TetMart-Core
5.2 Tạo môi trường ảo
Windows:
python -m venv .venv
.venv\Scripts\activate
Linux / macOS:
python3 -m venv .venv
source .venv/bin/activate
5.3 Cài đặt dependencies
pip install -r requirements.txt
6. Cấu hình database
Tạo database:
CREATE DATABASE tet_mart_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Cập nhật trong tetmart/settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'tet_mart_db',
'USER': 'your_mysql_user',
'PASSWORD': 'your_mysql_password',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
7. Khởi tạo dữ liệu
python manage.py makemigrations
python manage.py migrate
Hoặc import:
mysql -u your_user -p tet_mart_db < database_backup.sql
8. Chạy dự án
git checkout feature/backendpython -m venv .venv
.venv\Scripts\activatepython3 -m venv .venv
source .venv/bin/activatepip install -r requirements.txtCREATE DATABASE tet_mart_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;Cập nhật cấu hình trong tetmart/settings.py hoặc chuyển sang dùng biến môi trường trong file .env:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'tet_mart_db',
'USER': 'your_mysql_user',
'PASSWORD': 'your_mysql_password',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}python manage.py makemigrations
python manage.py migratemysql -u your_mysql_user -p tet_mart_db < database_backup.sqlpython manage.py createsuperuserpython manage.py runserverTruy cập ứng dụng tại:
http://127.0.0.1:8000/
9. Tài khoản
Quản trị
python manage.py createsuperuser
Truy cập:
http://127.0.0.1:8000/
9. Tài khoản
Quản trị
python manage.py createsuperuser
Truy cập:
http://127.0.0.1:8000/admin/
Người dùng
Đăng ký: /auth/register/
Đăng nhập: /auth/login/
10. Git Workflow
Các nhánh sử dụng:
main
develop
feature/backend
feature/frontend
feature/tester
Quy trình:
feature → develop → main
Ví dụ commit:
git commit -m "fix(auth): sửa lỗi login/register không nhận dữ liệu"
11. Đóng góp
git checkout -b feature/your-feature
git commit -m "feat: thêm chức năng ..."
git push origin feature/your-feature
Sau đó tạo Pull Request.
12. Lưu ý
Không commit file .env
Không push dữ liệu database thật
Kiểm tra migration trước khi push
13. Tác giả
Lê Hồng Sơn
Nguyễn Danh Thế
Ngô Thị Sinh
14. Giấy phép
Dự án phục vụ mục đích học tập và phát triển nội bộ.
http://127.0.0.1:8000/admin/
Người dùng
Đăng ký: /auth/register/
Đăng nhập: /auth/login/
10. Git Workflow
Các nhánh sử dụng:
main
develop
feature/backend
feature/frontend
feature/tester
Quy trình:
feature → develop → main
Ví dụ commit:
git commit -m "fix(auth): sửa lỗi login/register không nhận dữ liệu"
11. Đóng góp
git checkout -b feature/your-feature
git commit -m "feat: thêm chức năng ..."
git push origin feature/your-feature
Sau đó tạo Pull Request.
12. Lưu ý
Không commit file .env
Không push dữ liệu database thật
Kiểm tra migration trước khi push
13. Tác giả
Lê Hồng Sơn
Nguyễn Danh Thế
Ngô Thị Sinh
14. Giấy phép
Dự án phục vụ mục đích học tập và phát triển nội bộ.
Trang quản trị Django:
http://127.0.0.1:8000/admin/
Dự án đã import python-dotenv, vì vậy nên dùng file .env để tách cấu hình nhạy cảm khỏi source code.
Ví dụ file .env:
SECRET_KEY=your-secret-key
DEBUG=True
DB_NAME=tet_mart_db
DB_USER=your_mysql_user
DB_PASSWORD=your_mysql_password
DB_HOST=127.0.0.1
DB_PORT=3306Khuyến nghị khi triển khai:
- Không commit file
.env. - Không hard-code
SECRET_KEY, tài khoản database hoặc mật khẩu trong source code. - Tắt
DEBUGkhi deploy production. - Cấu hình
ALLOWED_HOSTStheo domain thực tế. - Backup database định kỳ.
feature/* -> develop -> main
Các nhánh thường dùng:
main: phiên bản ổn định.develop: tích hợp các tính năng đã hoàn thiện.feature/backend: phát triển backend.feature/frontend: phát triển giao diện.feature/tester: kiểm thử.
Nên sử dụng format commit rõ ràng:
git commit -m "feat(product): thêm chức năng lọc sản phẩm theo giá"
git commit -m "fix(auth): sửa lỗi đăng nhập không chuyển trang"
git commit -m "refactor(order): tối ưu logic tạo đơn hàng"
git commit -m "docs(readme): cập nhật hướng dẫn cài đặt"Một số prefix nên dùng:
| Prefix | Ý nghĩa |
|---|---|
feat |
Thêm tính năng mới |
fix |
Sửa lỗi |
refactor |
Tái cấu trúc code |
docs |
Cập nhật tài liệu |
style |
Chỉnh format, UI, convention |
test |
Thêm hoặc sửa test |
chore |
Công việc phụ trợ |
- Tách logic theo app đúng trách nhiệm.
- Đặt tên biến, hàm, class rõ nghĩa.
- Không viết logic xử lý quá dài trong template.
- Kiểm tra quyền trước khi truy cập dashboard.
- Validate dữ liệu đầu vào trước khi lưu database.
- Không commit file chứa thông tin nhạy cảm.
- Kiểm tra migration trước khi push code.
Một số tính năng có thể mở rộng:
- Xây dựng REST API bằng Django REST Framework.
- Tích hợp thanh toán online như VNPay, MoMo hoặc ZaloPay.
- Tự động trừ tồn kho khi đơn hàng được xác nhận.
- Gửi email xác nhận đơn hàng.
- Thêm chức năng đánh giá sản phẩm.
- Thêm wishlist / sản phẩm yêu thích.
- Thêm dashboard biểu đồ trực quan bằng Chart.js.
- Thêm unit test và integration test.
- Docker hóa môi trường chạy dự án.
- Triển khai lên VPS, Render, Railway hoặc cloud platform.
- Lê Hồng Sơn
- Nguyễn Danh Thế
- Ngô Thị Sinh