Giới thiệu dự án
Thương mại điện tử (TMĐT) tại Việt Nam đang duy trì tốc độ tăng trưởng ấn tượng trên 20%/năm, vươn lên vị trí thứ ba trong khu vực ASEAN (chỉ sau Indonesia và Thái Lan). Tuy nhiên, tại các thị trường đô thị cấp tỉnh như thành phố Huế, phần lớn các cửa hàng bán lẻ thời trang giày dép vẫn vận hành theo phương thức truyền thống kết hợp bán hàng rời rạc qua mạng xã hội (Facebook cá nhân, Fanpage, Zalo).
Shop giày MiTy (địa chỉ: 264 Phan Chu Trinh, TP. Huế) là một mô hình bán lẻ điển hình chuyên cung cấp giày dép nữ, giày công sở và phụ kiện thời trang. Hoạt động kinh doanh của shop đang đối mặt với nhiều điểm nghẽn nghiêm trọng:
- Giới hạn không gian và thời gian: Thời gian phục vụ bị giới hạn 11 tiếng/ngày; khách hàng phải trực tiếp đến cửa hàng để kiểm tra mẫu mã, kích cỡ và so sánh giá.
- Tắc nghẽn quy trình bán hàng: Việc tư vấn, chốt đơn và lên hóa đơn thủ công dẫn đến quá tải trong các đợt cao điểm khuyến mãi; phát sinh tỷ lệ sai sót tồn kho lên đến 12%.
- Phân mảnh dữ liệu quản trị: Toàn bộ thông tin nhân viên, nhà cung cấp, kiểm kê kho và lịch sử mua hàng được ghi chép qua sổ sách hoặc bảng tính đơn giản, không hỗ trợ trích xuất báo cáo động.
+----------------------------------------------+
| SHOP GIÀY MITY (TP. HUẾ) |
+----------------------------------------------+
|
+---------------------+---------------------+
| |
v v
+------------------------------+ +------------------------------+
| MÔ HÌNH CŨ (OFFLINE/FB) | | MÔ HÌNH MỚI (DJANGO) |
+------------------------------+ +------------------------------+
| - Giới hạn 11h/ngày | | - Vận hành 24/7 toàn quốc |
| - Sổ sách ghi tay & Excel | ---> | - Cơ sở dữ liệu tập trung |
| - Sai lệch tồn kho ~12% | | - Đồng bộ tồn kho tức thì |
| - Chốt đơn thủ công qua tin | | - Giỏ hàng, QR Code, Tự động |
+------------------------------+ +------------------------------+
Đề tài "Xây dựng website bán hàng trực tuyến cho Shop giày MiTy - Thành phố Huế sử dụng Django theo mô hình MVC" do sinh viên Nguyễn Văn Vũ thực hiện (dưới sự hướng dẫn của TS. Hà Ngọc Long, Khoa Hệ thống Thông tin Kinh tế - Trường Đại học Kinh tế, Đại học Huế) giải quyết bài toán chuyển đổi số toàn diện cho shop MiTy.
Mục tiêu cụ thể của dự án:
- Khảo sát chi tiết nghiệp vụ bán hàng, quản lý kho, dòng tiền và cơ cấu tổ chức tại Shop giày MiTy Huế.
- Thiết kế hệ thống thông tin hướng đối tượng (OOAD) chuẩn hóa với biểu đồ Use Case, sơ đồ tuần tự (Sequence Diagram) và sơ đồ cơ sở dữ liệu quan hệ (ERD).
- Triển khai website thương mại điện tử hoàn chỉnh trên nền tảng Python/Django Framework áp dụng kiến trúc MVC/MVT.
- Xây dựng phân hệ người dùng (tìm kiếm, giỏ hàng, đặt hàng thanh toán COD/QR) và phân hệ quản trị (quản lý sản phẩm, đơn hàng, khách hàng, nhân viên, báo cáo doanh thu).
Phạm vi & Giới hạn:
- Phạm vi triển khai: Áp dụng thực nghiệm cho toàn bộ hoạt động kinh doanh bán lẻ của Shop giày MiTy tại 264 Phan Chu Trinh, TP. Huế trong khung thời gian nghiên cứu khóa luận.
- Giới hạn kỹ thuật: Hệ thống tập trung vào quy trình xử lý đơn hàng nội bộ, thanh toán chuyển khoản quét mã QR tĩnh / COD, chưa tích hợp cổng thanh toán trực tuyến trung gian tự động (như VNPay, MoMo IPN) và chưa tích hợp API đơn vị vận chuyển bên thứ ba (GHN, GHTK).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát thị trường bán lẻ giày dép tại Huế cho thấy các giải pháp hiện tại tồn tại nhiều bất cập:
| Giải pháp hiện có |
Ưu điểm |
Nhược điểm |
Khả năng thích ứng với Shop MiTy |
| Bán hàng thủ công & Facebook cá nhân |
Chi phí ban đầu 0đ, giao tiếp trực tiếp với khách quen. |
Dễ sót đơn, không đồng bộ tồn kho, tốn nhân lực trực chat 24/7, thiếu chuyên nghiệp. |
Không đáp ứng khi mở rộng quy mô trên 50 đơn/ngày. |
| Sàn TMĐT (Shopee, Lazada) |
Lượng truy cập lớn, tích hợp sẵn vận chuyển. |
Phí sàn cao (8-15%), cạnh tranh khốc liệt về giá, không xây dựng được thương hiệu riêng. |
Phù hợp làm kênh phụ, không tối ưu cho nhận diện thương hiệu địa phương. |
| Nền tảng SaaS đóng gói (Sapo, Haravan) |
Đầy đủ tính năng, triển khai nhanh. |
Chi phí thuê bao hàng tháng cao, khó tùy biến sâu luồng nghiệp vụ đặc thù của shop. |
Tốn kém chi phí định kỳ cho một cửa hàng độc lập. |
| Website chuyên biệt trên Django (Đề tài) |
Tùy biến 100%, bảo mật cao, mở rộng linh hoạt, chi phí duy trì thấp. |
Cần nhân sự kỹ thuật xây dựng và cấu hình ban đầu. |
Tối ưu nhất về lâu dài cho việc định vị thương hiệu Shop MiTy. |
Ưu tiên yêu cầu hệ thống theo mô hình MoSCoW:
- Must have (Bắt buộc): Đăng ký/đăng nhập phân quyền (Admin, Employee, Customer); Danh mục và chi tiết giày dép (kích cỡ, màu sắc, giá, ảnh); Tìm kiếm theo tên/giá; Giỏ hàng (CRUD item); Quy trình đặt hàng lưu hóa đơn; Quản lý đơn hàng và trạng thái xử lý; Phân quyền nhân viên.
- Should have (Nên có): Thanh toán chuyển khoản hiển thị mã QR động theo đơn; Quản lý tin tức/khuyến mãi; Thống kê doanh thu theo ngày/tháng; Báo cáo sản phẩm bán chạy/tồn kho.
- Could have (Có thể có): Đánh giá/bình luận sản phẩm từ thành viên; Gợi ý sản phẩm cùng danh mục.
- Won't have (Chưa có trong giai đoạn này): Cổng thanh toán quốc tế qua thẻ tín dụng (Stripe/PayPal), tính phí ship tự động theo định vị GPS.
Thiết kế hệ thống
Hệ thống được tổ chức theo kiến trúc Model - Template - View (MVT), biến thể thực thi của mô hình Model - View - Controller (MVC) trong Django:
+-------------------------------------------------------------------------+
| CLIENT BROWSER |
| (HTML5 / CSS3 / JavaScript) |
+-------------------------------------------------------------------------+
| HTTP Request (GET/POST)
v
+-------------------------------------------------------------------------+
| DJANGO CORE |
| |
| +-------------------+ +-------------------------------------+ |
| | urls.py | ----> | views.py | |
| | (URL Dispatcher) | | (Controller Logic / Handlers) | |
| +-------------------+ +-------------------------------------+ |
| | | |
| v v |
| +--------------------+ +--------------------+ |
| | models.py | | templates/*.html | |
| | (Django ORM) | | (Presentation UI) | |
| +--------------------+ +--------------------+ |
| | | |
+---------------------------------|-------------------------|-------------+
| SQL Queries | Rendered HTML
v v
+-----------------------------+ +---------------------+
| DATABASE (MySQL / SQLite) | | HTTP RESPONSE |
+-----------------------------+ +---------------------+
Technology Stack & Version:
- Ngôn ngữ: Python 3.10.x
- Web Framework: Django 4.2 LTS
- Cơ sở dữ liệu: MySQL 8.0 / SQLite (phát triển) qua Django ORM
- Giao diện: HTML5, CSS3, JavaScript ES6, Bootstrap 5 UI Framework
- Công cụ thiết kế & quản lý: Visual Studio Code, phpMyAdmin, Draw.io, Git
Thiết kế Cơ sở dữ liệu (Database Schema):
Các thực thể chính được trừu tượng hóa thành các Django Models có quan hệ chặt chẽ:
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
name = models.CharField(max_length=100, unique=True, verbose_name="Tên danh mục")
slug = models.SlugField(max_length=120, unique=True)
description = models.TextField(blank=True, null=True)
def __str__(self):
return self.name
class Brand(models.Model):
name = models.CharField(max_length=100, verbose_name="Thương hiệu")
origin = models.CharField(max_length=100, blank=True)
class Size(models.Model):
size_number = models.IntegerField(unique=True, verbose_name="Kích cỡ")
class Product(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='products')
brand = models.ForeignKey(Brand, on_delete=models.SET_NULL, null=True)
name = models.CharField(max_length=200, verbose_name="Tên giày")
price = models.DecimalField(max_digits=10, decimal_places=0, verbose_name="Đơn giá (VNĐ)")
sizes = models.ManyToManyField(Size, related_name='products')
color = models.CharField(max_length=50, verbose_name="Màu sắc")
image = models.ImageField(upload_to='products/')
stock_quantity = models.PositiveIntegerField(default=0, verbose_name="Tồn kho")
description = models.TextField(verbose_name="Mô tả sản phẩm")
is_active = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
class Order(models.Model):
STATUS_CHOICES = [
('PENDING', 'Chờ xử lý'),
('CONFIRMED', 'Đã xác nhận'),
('SHIPPING', 'Đang giao'),
('COMPLETED', 'Đã hoàn thành'),
('CANCELLED', 'Đã hủy'),
]
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
customer_name = models.CharField(max_length=100)
customer_phone = models.CharField(max_length=15)
shipping_address = models.CharField(max_length=255)
total_amount = models.DecimalField(max_digits=12, decimal_places=0)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='PENDING')
created_at = models.DateTimeField(auto_now_add=True)
class OrderDetail(models.Model):
order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='items')
product = models.ForeignKey(Product, on_delete=models.PROTECT)
size = models.ForeignKey(Size, on_delete=models.PROTECT)
quantity = models.PositiveIntegerField(default=1)
price = models.DecimalField(max_digits=10, decimal_places=0)
Thiết kế RESTful URL Endpoints:
| Method |
Endpoint |
Handler View |
Chức năng |
Phân quyền |
GET |
/ |
home_view |
Hiển thị trang chủ, banner, sản phẩm mới |
Toàn quyền (Public) |
GET |
/products/ |
product_list_view |
Lọc, tìm kiếm và phân trang sản phẩm |
Toàn quyền (Public) |
GET |
/products/<id>/ |
product_detail_view |
Chi tiết mẫu giày, chọn size, bảng giá |
Toàn quyền (Public) |
POST |
/cart/add/<id>/ |
add_to_cart_view |
Thêm sản phẩm + size vào giỏ hàng |
Visitor / Customer |
GET |
/cart/ |
cart_detail_view |
Xem danh sách món hàng trong giỏ |
Visitor / Customer |
POST |
/checkout/ |
checkout_view |
Xác nhận đơn hàng & tạo thông tin hóa đơn |
Visitor / Customer |
GET/POST |
/staff/orders/ |
manage_orders_view |
Danh sách đơn hàng, cập nhật trạng thái |
Employee / Admin |
GET/POST |
/staff/products/ |
manage_products_view |
Thêm, sửa, cập nhật sản phẩm tồn kho |
Employee / Admin |
Methodology
Dự án áp dụng mô hình phát triển phần mềm lặp rút gọn kết hợp các nguyên lý của Agile/Scrum:
- Milestone 1 (12/07/2023 – 30/07/2023): Khảo sát thực địa tại 264 Phan Chu Trinh, thu thập dữ liệu sản phẩm, phỏng vấn chủ shop và nhân viên thu ngân; xác lập biểu đồ Use Case và chuẩn hóa thực thể.
- Milestone 2 (01/08/2023 – 25/08/2023): Thiết kế Database Schema, cấu hình Django project, xây dựng Module Auth và Module Catalog (Models, Views, Templates).
- Milestone 3 (26/08/2023 – 15/09/2023): Hiện thực hóa Session Shopping Cart, quy trình Checkout Transaction, thanh toán QR Code và trang Admin Dashboard quản lý đơn hàng.
- Milestone 4 (16/09/2023 – 30/09/2023): Kiểm thử hộp đen (Black-box testing), kiểm thử tích hợp (Integration test), UAT với nhân viên shop MiTy và hoàn thiện khóa luận.
Implementation và kết quả
Development process
Quá trình xây dựng hệ thống tập trung giải quyết các thuật toán và nghiệp vụ cốt lõi:
1. Quản lý giỏ hàng thông qua Django Session (Không phụ thuộc bắt buộc đăng nhập):
Cho phép cả Visitor và Customer thêm sản phẩm vào giỏ hàng mà không bị mất dữ liệu khi duyệt web.
# cart/cart.py
from decimal import Decimal
from django.conf import settings
from shop.models import Product
class Cart:
def __init__(self, request):
self.session = request.session
cart = self.session.get('cart_session_key')
if not cart:
cart = self.session['cart_session_key'] = {}
self.cart = cart
def add(self, product, size_id, quantity=1, override_quantity=False):
product_key = f"{product.id}_{size_id}"
if product_key not in self.cart:
self.cart[product_key] = {
'product_id': product.id,
'size_id': size_id,
'quantity': 0,
'price': str(product.price)
}
if override_quantity:
self.cart[product_key]['quantity'] = quantity
else:
self.cart[product_key]['quantity'] += quantity
self.save()
def save(self):
self.session.modified = True
def get_total_price(self):
return sum(Decimal(item['price']) * item['quantity'] for item in self.cart.values())
2. Xử lý đặt hàng đồng thời với Database Transaction Atomic:
Đảm bảo tính toàn vẹn dữ liệu (ACID), tự động trừ tồn kho và rollback nếu có bất kỳ lỗi nào xảy ra trong quá trình ghi đơn hàng.
# orders/views.py
from django.db import transaction
from django.shortcuts import render, redirect
from .models import Order, OrderDetail
from shop.models import Product, Size
from cart.cart import Cart
@transaction.atomic
def process_checkout(request):
cart = Cart(request)
if request.method == 'POST' and len(cart.cart) > 0:
order = Order.objects.create(
user=request.user if request.user.is_authenticated else None,
customer_name=request.POST.get('full_name'),
customer_phone=request.POST.get('phone_number'),
shipping_address=request.POST.get('address'),
total_amount=cart.get_total_price(),
status='PENDING'
)
for key, item in cart.cart.items():
product = Product.objects.select_for_update().get(id=item['product_id'])
size = Size.objects.get(id=item['size_id'])
# Kiểm tra và trừ kho
if product.stock_quantity < item['quantity']:
raise ValueError(f"Sản phẩm {product.name} không đủ số lượng trong kho!")
product.stock_quantity -= item['quantity']
product.save()
OrderDetail.objects.create(
order=order,
product=product,
size=size,
quantity=item['quantity'],
price=Decimal(item['price'])
)
# Xóa giỏ hàng sau khi hoàn tất đơn
request.session['cart_session_key'] = {}
return render(request, 'orders/order_success.html', {'order': order})
3. Thuật toán tìm kiếm và lọc đa tiêu chí bằng Q Object:
Tối ưu hóa tốc độ truy vấn cơ sở dữ liệu khi khách hàng tìm kiếm kết hợp theo từ khóa tên sản phẩm, danh mục và khoảng giá:
# shop/views.py
from django.db.models import Q
from .models import Product
def product_search_view(request):
query = request.GET.get('q', '')
min_price = request.GET.get('min_price')
max_price = request.GET.get('max_price')
products = Product.objects.filter(is_active=True).select_related('category', 'brand')
if query:
products = products.filter(
Q(name__icontains=query) |
Q(description__icontains=query) |
Q(brand__name__icontains=query)
)
if min_price and max_price:
products = products.filter(price__gte=min_price, price__lte=max_price)
return render(request, 'shop/product_list.html', {'products': products, 'query': query})
Testing và validation
Quá trình kiểm thử được tiến hành toàn diện qua các cấp độ Unit Testing, Integration Testing và User Acceptance Testing (UAT):
+-------------------------------------------------------------------------+
| KIỂM THỬ HỆ THỐNG |
+-------------------------------------------------------------------------+
| |
v v
+-------------------------------+ +-------------------------------+
| KIỂM THỬ CHỨC NĂNG | | HIỆU NĂNG & PHẢN HỒI |
| - 28/28 Test Cases Đạt (100%) | | - Phản hồi TB: 142ms |
| - CSRF & SQL Injection: An toàn| | - Tải 50 users: 0% lỗi HTTP |
| - Transaction Rollback: 100% | | - Điểm UAT thực tế: 88.5/100 |
+-------------------------------+ +-------------------------------+
- Kiểm thử chức năng: Thực hiện 28 kịch bản kiểm thử (Test Cases) bao gồm các chức năng đăng ký, đăng nhập, thêm/sửa/xóa sản phẩm, cập nhật giỏ hàng, hủy đơn và tính toán số tiền. Tỷ lệ pass đạt 100% (28/28 test cases).
- Kiểm thử an toàn bảo mật:
- Xác thực cơ chế chống giả mạo request liên trang với
{% csrf_token %} trên tất cả các HTML form POST.
- Kiểm tra SQL Injection bằng cách chèn các payload độc hại (
' OR '1'='1) vào ô tìm kiếm; 100% truy vấn được tham số hóa an toàn qua Django ORM QuerySet.
- Kiểm thử hiệu năng (Locust Load Test):
- Tốc độ phản hồi trung bình (Average Response Time): 142ms với các truy vấn đọc trang chủ và danh sách sản phẩm.
- Tải đồng thời: Chịu tải tốt ở mức 50 người dùng đồng thời (concurrent users) duyệt sản phẩm và đặt hàng với tỷ lệ lỗi (Failure Rate) 0.0%.
Kết quả đạt được
Hệ thống đã hoàn thành 100% các yêu cầu nghiệp vụ đặt ra ban đầu:
| Chỉ số / Chức năng |
Kế hoạch ban đầu |
Kết quả thực nghiệm đạt được |
| Phân hệ chức năng |
4 nhóm tác nhân (Admin, Employee, Customer, Visitor) |
Hoàn thành 100%, phân quyền chặt chẽ qua Django Permission |
| Độ trễ tải trang (TTFB) |
< 300ms |
118ms trên môi trường máy chủ cục bộ / staging |
| Thời gian tạo đơn hàng |
Giảm 50% so với thủ công |
Giảm 68.5% (từ trung bình 6 phút ghi sổ xuống 1.9 phút/đơn) |
| Độ chính xác số liệu tồn kho |
Sai số < 2% |
100% chính xác nhờ xử lý Atomic Database Transaction |
| Mức độ hài lòng người dùng (UAT) |
Điểm đánh giá > 80/100 |
88.5/100 điểm (khảo sát thực tế từ nhân viên và 30 khách mua) |
Đổi mới và đóng góp
- Chuyển đổi số thực chất cho bán lẻ địa phương: Xóa bỏ hoàn toàn việc ghi chép đơn hàng bằng sổ tay tại Shop MiTy Huế, thay thế bằng cơ sở dữ liệu quan hệ tập trung chuẩn hóa 3NF.
- Tối ưu hóa quy trình thanh toán không dùng tiền mặt: Tích hợp cơ chế tạo mã QR động hỗ trợ chuyển khoản nhanh với nội dung chuyển khoản được định dạng chuẩn:
MITY <Mã đơn hàng> <Số điện thoại>, giúp nhân viên thu ngân đối soát nhanh chóng hơn 80%.
- Kiến trúc mã nguồn mở có tính mở rộng cao: Ứng dụng mô hình MTV/MVC của Django giúp tách biệt hoàn toàn giữa tầng xử lý logic dữ liệu và tầng hiển thị HTML5/CSS3. Điều này giúp các lập trình viên kế thừa có thể dễ dàng nâng cấp giao diện hoặc chuyển đổi sang mô hình Headless CMS (kết hợp Django REST Framework với React/Vue) trong tương lai.
Bảng so sánh giải pháp của đề tài với các giải pháp trên thị trường:
| Tiêu chí |
Website Django (Đề tài Shop MiTy) |
WordPress / WooCommerce |
Website PHP thuần (Custom PHP) |
| Mức độ bảo mật |
Rất cao (Tích hợp sẵn bộ lọc CSRF, XSS, SQLi) |
Trung bình (Dễ bị tấn công qua lỗ hổng Plugin) |
Phụ thuộc vào trình độ viết code của lập trình viên |
| Tốc độ xử lý CSDL |
Tối ưu (ORM hỗ trợ lazy loading, indexing) |
Chậm khi dữ liệu bài viết và đơn hàng phình to |
Tự viết query, dễ phát sinh lỗi N+1 Query |
| Khả năng mở rộng API |
Dễ dàng (Tích hợp Django Rest Framework) |
Khá cồng kềnh qua REST API mặc định |
Phải cấu trúc lại toàn bộ mã nguồn |
| Chi phí bản quyền |
0 VNĐ (Hoàn toàn mã nguồn mở) |
0 VNĐ (nhưng tốn phí mua plugin chuyên nghiệp) |
0 VNĐ |
Ứng dụng thực tế và triển khai
Hướng dẫn triển khai hệ thống (Deployment Architecture)
Hệ thống được thiết kế để triển khai tiêu chuẩn trên môi trường máy chủ Linux (Ubuntu Server 22.04 LTS) kết hợp Nginx làm Reverse Proxy và Gunicorn làm WSGI Application Server:
[ Khách hàng / Trình duyệt ]
|
v (Cổng 80/443 - HTTP/HTTPS)
+-----------------+
| Nginx Server | ---> Xử lý trực tiếp Static Files (/static/, /media/)
+-----------------+
|
v (Unix Socket / Proxy Pass)
+-----------------+
| Gunicorn (WSGI) | ---> Thực thi Python/Django Backend
+-----------------+
|
v (TCP Port 3306)
+-----------------+
| MySQL Database |
+-----------------+
Các bước triển khai chính:
- Cấu hình môi trường ảo Python:
python3 -m venv venv
source venv/bin/activate
pip install django pillow mysqlclient gunicorn
- Khởi tạo và di chuyển cơ sở dữ liệu:
python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic --noinput
- Chạy dịch vụ qua Gunicorn:
gunicorn --workers 3 --bind unix:/home/mity/mity_shop.sock mity_project.wsgi:application
Phân tích Hiệu quả Đầu tư (Cost - Benefit Analysis):
- Chi phí đầu tư phần mềm ban đầu: 0 VNĐ chi phí bản quyền (sử dụng Python, Django, MySQL, Linux).
- Chi phí vận hành: Chỉ từ 150.000 - 250.000 VNĐ/tháng cho gói Cloud VPS cơ bản (1 vCPU, 2GB RAM, 30GB SSD).
- Hiệu quả kinh tế dự kiến: Giảm 1 nhân sự trực kiểm đếm đơn hàng bán lẻ (~5.000.000 VNĐ/tháng), tăng doanh thu bán hàng ngoài khung giờ mở cửa ước đạt 15-25% sau 3 tháng vận hành.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Chưa tích hợp Webhook tự động nhận thông báo biến động số dư ngân hàng (IPN Auto-Confirmation), nhân viên vẫn cần đối soát thủ công ảnh chụp ủy nhiệm chi hoặc sao kê ngân hàng.
- Chưa có hệ thống gợi ý sản phẩm thông minh (Recommendation System) dựa trên lịch sử xem hàng và hành vi mua sắm của khách.
- Giao diện người dùng (UI) dừng lại ở mức Server-Side Rendering (SSR) truyền thống, chưa khai thác mô hình Single Page Application (SPA) với ReactJS để mang lại trải nghiệm mượt mà không tải lại trang.
Hướng phát triển trong tương lai
- Nâng cấp API & Mobile App: Tích hợp
djangorestframework để đóng gói toàn bộ logic thành hệ thống RESTful API, làm tiền đề phát triển ứng dụng di động (Flutter / React Native) cho khách hàng thân thiết.
- Tích hợp Cổng thanh toán & Vận chuyển: Tích hợp cổng thanh toán trực tiếp VNPay/ZaloPay SDK và kết nối API tra cứu cước phí, đẩy vận đơn tự động qua Giao Hàng Tiết Kiệm (GHTK).
- Ứng dụng Trí tuệ Nhân tạo: Xây dựng mô hình Collaborative Filtering gợi ý mẫu giày dép phù hợp theo xu hướng và độ tuổi; tích hợp Chatbot AI hỗ trợ tư vấn size giày tự động 24/7.
Đối tượng hưởng lợi
- Đối với Sinh viên ngành HTTT Kinh tế / CNTT: Là tài liệu tham khảo hoàn chỉnh về quy trình xây dựng đồ án/khóa luận tốt nghiệp chuẩn chỉnh từ khảo sát thực tế, phân tích hướng đối tượng (OOAD) đến hiện thực hóa mã nguồn trên Django.
- Đối với Lập trình viên Backend: Nắm bắt mô hình kiến trúc MVC/MVT, kỹ thuật quản lý giỏ hàng bằng Session, kỹ thuật viết ORM Query tối ưu tránh lỗi N+1, và cơ chế bảo vệ giao dịch với
@transaction.atomic.
- Đối với Chủ cửa hàng bán lẻ (SMEs): Bản thiết kế mẫu (Blueprint) giúp ứng dụng công nghệ thông tin vào việc tinh gọn bộ máy kinh doanh, số hóa dữ liệu tồn kho với mức chi phí tối thiểu.
- Đối với Các nhà nghiên cứu: Dữ liệu thực nghiệm về hành vi mua sắm trực tuyến của người tiêu dùng tại các đô thị loại I/loại II miền Trung Việt Nam.
Câu hỏi thường gặp
1. Cấu hình phần cứng và phần mềm tối thiểu để vận hành website là gì?
Hệ thống yêu cầu máy chủ Linux (Ubuntu 20.04+) hoặc Windows Server với tối thiểu 1 vCPU, 1GB RAM và 10GB dung lượng ổ đĩa. Môi trường phần mềm yêu cầu Python 3.8+ và hệ quản trị cơ sở dữ liệu MySQL 5.7+ hoặc PostgreSQL 12+.
2. Website có chịu được lượng truy cập lớn trong các đợt flash sale không?
Có. Nhờ cơ chế hoạt động phi trạng thái (stateless) của Django kết hợp cùng WSGI Gunicorn (cấu hình nhiều worker process) và bộ nhớ đệm (Cache Framework) tích hợp Redis, hệ thống có thể dễ dàng chịu tải từ 500 đến 1.000 yêu cầu/giây mà không gặp hiện tượng nghẽn cổ chai cơ sở dữ liệu.
3. Làm thế nào để đảm bảo hệ thống không bị bán vượt số lượng tồn kho (Overselling)?
Hệ thống sử dụng cơ chế khóa mức dòng (Row-level Locking) thông qua câu lệnh select_for_update() nằm trong khối giao dịch transaction.atomic. Khi một khách hàng tiến hành thanh toán, số lượng sản phẩm được giữ độc quyền cho đến khi đơn hàng hoàn tất hoặc bị hủy, ngăn chặn tuyệt đối tình trạng hai người mua cùng một đôi giày cuối cùng trong kho.
4. Chi phí duy trì hệ thống hàng năm ước tính khoảng bao nhiêu?
Chi phí duy trì bao gồm: Tên miền quốc tế/Việt Nam (.com/.vn) khoảng 250.000 – 750.000 VNĐ/năm và máy chủ Cloud VPS khoảng 1.800.000 – 2.500.000 VNĐ/năm. Tổng chi phí vận hành ước tính chưa đến 3.000.000 VNĐ/năm.
5. Website có hỗ trợ tối ưu hóa công cụ tìm kiếm (SEO) không?
Có. Django hỗ trợ cơ chế tạo đường dẫn thân thiện (Friendly URLs via SlugField), quản trị thẻ Meta động cho từng sản phẩm, tự động xuất XML Sitemap và cấu trúc mã nguồn HTML5 chuẩn ngữ nghĩa giúp các công cụ tìm kiếm như Google thu thập dữ liệu nhanh chóng.
Kết luận
Khóa luận tốt nghiệp "Xây dựng website bán hàng trực tuyến cho Shop giày MiTy - Thành phố Huế sử dụng Django theo mô hình MVC" của tác giả Nguyễn Văn Vũ đã giải quyết xuất sắc bài toán số hóa toàn diện quy trình kinh doanh của một cửa hàng thời trang địa phương.
Đề tài không chỉ hoàn thành xuất sắc các mục tiêu học thuật về phân tích hệ thống hướng đối tượng và lập trình ứng dụng web trên nền tảng Python/Django, mà còn mang lại giá trị thực tiễn to lớn cho Shop giày MiTy trong việc mở rộng thị trường, nâng cao chất lượng dịch vụ và tối ưu hóa chi phí vận hành. Đây là một mô hình ứng dụng tiêu biểu, có tính khả thi cao và sẵn sàng nhân rộng cho các mô hình kinh doanh bán lẻ vừa và nhỏ trong kỷ nguyên kinh tế số.