Hệ thống quản lý khu du lịch thông minh với Python: So sánh Flask và Django

Đây là một hệ thống quản lý khu du lịch dựa trên nền tảng web, được xây dựng bằng ngôn ngữ Python với hai khung phát triển phổ biến: Flask và Django. Mục tiêu chính là cung cấp giải pháp quản trị toàn diện cho các điểm tham quan — từ đặt vé, quản lý nhân sự, giám sát lượt khách đến phân tích hành vi người dùng.

Môi trường phát triển và công nghệ sử dụng

  • Ngôn ngữ lập trình: Python 3.7–3.9
  • Khung ứng dụng: Flask (cho kiến trúc nhẹ, linh hoạt) và Django (cho hệ thống có tính toàn vẹn cao, tích hợp sẵn)
  • Cơ sở dữ liệu: MySQL 5.7 / 8.0
  • Công cụ quản trị CSDL: Navicat hoặc MySQL Workbench
  • Môi trường phát triển: PyCharm Community/Professional
  • Trình duyệt kiểm thử: Google Chrome (phiên bản mới nhất)
  • Mô hình kiến trúc: B/S (Browser/Server), hỗ trợ đa nền tảng

Thiết kế hệ thống

Hệ thống áp dụng nguyên tắc thiết kế hướng đối tượng (OOP), trong đó mỗi thực thể như Tourist, Ticket, Attraction được biểu diễn dưới dạng lớp với thuộc tính và phương thức riêng. Cơ sở dữ liệu được chuẩn hóa theo mô hình ER, đảm bảo tính toàn vẹn tham chiếu giữa các bảng như users, bookings, locationsfeedbacks.

Các thành phần thiết kế bao gồm:

  1. Thiết kế cơ sở dữ liệu: Xây dựng lược đồ quan hệ tối ưu, hỗ trợ truy vấn nhanh với chỉ mục trên các cột thường dùng như booking_time, user_id, attraction_code.
  2. Kiến trúc tổng thể: Tách biệt rõ ràng giữa tầng giao diện (HTML/CSS/JS), tầng logic nghiệp vụ (Flask routes hoặc Django views), và tầng dữ liệu (ORM hoặc truy vấn trực tiếp qua PyMySQL).
  3. Giao diện người dùng: Thiết kế responsive bằng Bootstrap 5, tích hợp biểu đồ tương tác với Chart.js để trực quan hóa lưu lượng khách theo giờ/ngày/tháng.
  4. Bảo mật: Xử lý xác thực qua JWT (Flask-JWT-Extended) hoặc Django’s built-in auth; ngăn chặn SQL injection và XSS bằng escaping tự động và input validation.

Cài đặt và chạy hệ thống

Sau khi tải mã nguồn, thực hiện các bước sau:

  1. Tạo cơ sở dữ liệu trống trong MySQL: CREATE DATABASE tourism_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  2. Nhập cấu trúc và dữ liệu mẫu từ file schema.sql hoặc initial_data.json bằng Navicat hoặc lệnh mysql -u root -p tourism_db < schema.sql.
  3. Chỉnh sửa tập tin cấu hình (ví dụ: config.py cho Flask hoặc settings.py cho Django) để cập nhật thông tin kết nối CSDL.
  4. Cài đặt phụ thuộc: pip install -r requirements.txt
  5. Với Flask: chạy python app.py; với Django: chạy python manage.py runserver.
  6. Truy cập hệ thống tại http://localhost:5000 (Flask) hoặc http://localhost:8000 (Django).

Mẫu mã nguồn minh họa

Flask – Tự động tải các module API

import os
from flask import Blueprint
from pathlib import Path

api_bp = Blueprint('api', __name__, url_prefix='/api')

# Tự động quét và đăng ký các file route trong thư mục api/
api_dir = Path(__file__).parent / 'routes'
for route_file in api_dir.glob("*.py"):
    if not route_file.name.startswith('_'):
        module_name = f"api.routes.{route_file.stem}"
        try:
            __import__(module_name)
        except ImportError as e:
            print(f"Không thể tải {module_name}: {e}")

Django – Xử lý đăng nhập người dùng an toàn

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth import authenticate
from .models import VisitorProfile
from utils.validators import validate_email, is_strong_password

@csrf_exempt
def handle_login(request):
    if request.method != 'POST':
        return JsonResponse({'code': 405, 'msg': 'Phương thức không được phép'}, status=405)

    data = json.loads(request.body)
    email = data.get('email')
    password = data.get('password')

    if not (validate_email(email) and password):
        return JsonResponse({'code': 400, 'msg': 'Dữ liệu đầu vào không hợp lệ'}, status=400)

    user = authenticate(username=email, password=password)
    if user and hasattr(user, 'profile'):
        profile = user.profile
        return JsonResponse({
            'code': 200,
            'msg': 'Đăng nhập thành công',
            'data': {
                'id': profile.id,
                'full_name': profile.full_name,
                'role': profile.role_type
            }
        })
    
    return JsonResponse({'code': 401, 'msg': 'Tài khoản hoặc mật khẩu sai'}, status=401)

So sánh lựa chọn khung phát triển

Tiêu chí Flask Django
Kích thước dự án Phù hợp với MVP, microservice, hệ thống nhỏ Phù hợp với hệ thống enterprise, có nhiều module nghiệp vụ
Tính linh hoạt Cao — nhà phát triển tự chọn ORM, template engine, auth… Trung bình — tích hợp sẵn admin, ORM, form, migration
Thời gian triển khai Nhanh hơn cho chức năng đơn giản Nhanh hơn cho chức năng phức tạp nhờ tính toàn vẹn
Học tập & bảo trì Dễ làm quen, dễ mở rộng theo nhu cầu Yêu cầu hiểu sâu hơn về quy ước Django (convention over configuration)

Phân tích khả thi

  • Khả thi kỹ thuật: Cả Flask và Django đều ổn định, có cộng đồng hỗ trợ lớn, tài liệu phong phú và tích hợp tốt với MySQL qua SQLAlchemy hoặc Django ORM.
  • Khả thi kinh tế: Toàn bộ stack là mã nguồn mở — không phát sinh chi phí giấy phép. Chi phí vận hành chủ yếu nằm ở máy chủ và băng thông.
  • Khả thi vận hành: Giao diện thân thiện, hỗ trợ tiếng Việt, tối ưu cho thiết bị di động; quy trình đăng ký, đặt vé và tra cứu được rút gọn dưới 3 bước.
  • Khả thi xã hội: Hệ thống đáp ứng xu hướng chuyển đổi số trong ngành du lịch, đặc biệt trong bối cảnh cần quản lý dòng khách theo thời gian thực và hỗ trợ ra quyết định dựa trên dữ liệu.

Thẻ: Flask Django mysql python-web orm

Đăng vào ngày 30 tháng 6 lúc 06:11