Hệ thống Đặt chỗ Phòng Tự học Sử dụng Django và Python

Dự án này giới thiệu một hệ thống quản lý đặt chỗ phòng tự học được xây dựng trên nền tảng Django của Python, cung cấp các chức năng toàn diện cho sinh viên và quản trị viên. Hệ thống được thiết kế để đơn giản hóa quy trình tìm kiếm, đặt chỗ và quản lý không gian học tập, đồng thời hỗ trợ quản lý hiệu quả các tài nguyên phòng ốc.

Tính năng chính

Đối với người dùng (sinh viên)

  • Quản lý tài khoản: Đăng ký, đăng nhập an toàn bằng mã số sinh viên hoặc email. Quản lý thông tin cá nhân như biệt danh, thông tin liên hệ và ảnh đại diện.
  • Tìm kiếm và xem thông tin phòng: Duyệt qua danh sách các phòng tự học hiện có, xem chi tiết từng phòng, bao gồm bố cục chỗ ngồi và trạng thái trống/đã đặt theo thời gian thực.
  • Đặt chỗ linh hoạt: Chọn chỗ ngồi mong muốn theo ngày và khung giờ cụ thể.
  • Quản lý lịch đặt: Xem lại tất cả các lịch đặt đã tạo, thực hiện hủy bỏ lịch đặt nếu không còn nhu cầu.
  • Xác nhận tham gia: Chức năng check-in khi đến phòng học đã đặt, đảm bảo tính chính xác của lịch sử sử dụng.
  • Lịch sử học tập: Theo dõi các buổi học đã check-in trước đây.

Đối với quản trị viên

  • Quản lý phòng tự học: Thêm, chỉnh sửa, xóa thông tin phòng, thiết lập giờ hoạt động.
  • Quản lý chỗ ngồi: Thực hiện các thao tác hàng loạt cho chỗ ngồi, cập nhật trạng thái trống/đã đặt.
  • Quản lý người dùng: Xem thông tin người dùng, khóa hoặc mở khóa tài khoản người dùng vi phạm quy định.
  • Quản lý đặt chỗ: Kiểm tra và xử lý các lịch đặt của sinh viên, xem toàn bộ dữ liệu đặt chỗ.
  • Theo dõi check-in: Truy xuất và xem lịch sử check-in của tất cả người dùng.
  • Quản lý danh sách đen: Kiểm soát các tài khoản bị hạn chế truy cập hệ thống.

Quy tắc đặt chỗ

  • Mỗi người dùng được phép đặt tối đa 3 khung giờ trong một ngày.
  • Các khung giờ đặt chỗ tiêu chuẩn:
    • Buổi sáng: 08:00 - 12:00
    • Buổi chiều: 13:00 - 17:00
    • Buổi tối: 18:00 - 22:00
  • Người dùng phải thực hiện check-in trong khung giờ đã đặt; nếu không, lịch đặt sẽ tự động bị hủy.
  • Có thể hủy lịch đặt trước thời gian để nhường chỗ cho người khác.

Công nghệ sử dụng

  • Backend: Django 3.2+
  • Cơ sở dữ liệu: MySQL 5.7+
  • Frontend: Bootstrap 5, jQuery
  • Ngôn ngữ lập trình: Python 3.8+

Cấu trúc dự án

Hệ thống được tổ chức theo cấu trúc chuẩn của Django, phân chia thành các ứng dụng nhỏ với nhiệm vụ cụ thể, giúp dễ dàng quản lý và mở rộng.

my_study_booking_project/   # Thư mục gốc của dự án
├── user_accounts/          # Ứng dụng quản lý tài khoản người dùng
│   ├── models.py           # Định nghĩa User tùy chỉnh, Blacklist
│   ├── views.py            # Xử lý đăng ký, đăng nhập, hồ sơ
│   ├── forms.py            # Biểu mẫu người dùng
│   └── admin.py            # Cấu hình Admin cho tài khoản
├── learning_spaces/        # Ứng dụng quản lý thông tin phòng tự học
│   ├── models.py           # Mô hình cho Phòng và Chỗ ngồi
│   ├── views.py            # Hiển thị danh sách và chi tiết phòng
│   └── admin.py            # Cấu hình Admin cho phòng và chỗ ngồi
├── booking_management/     # Ứng dụng xử lý đặt chỗ và check-in
│   ├── models.py           # Mô hình cho lịch đặt và lịch sử check-in
│   ├── views.py            # Xử lý logic đặt chỗ, hủy đặt, check-in
│   ├── forms.py            # Biểu mẫu đặt chỗ
│   └── admin.py            # Cấu hình Admin cho các lịch đặt
├── templates/              # Thư mục chứa các tệp mẫu HTML
│   ├── base.html           # Mẫu cơ sở, bố cục chung
│   ├── home.html           # Trang chủ
│   ├── user_accounts/      # Mẫu liên quan đến tài khoản
│   ├── learning_spaces/    # Mẫu liên quan đến phòng
│   └── booking_management/ # Mẫu liên quan đến đặt chỗ
├── static/                 # Thư mục cho các tệp tĩnh (CSS, JS, hình ảnh)
│   ├── css/
│   ├── js/
│   └── img/
├── uploaded_media/         # Thư mục lưu trữ các tệp tải lên của người dùng (ảnh đại diện, ảnh phòng)
│   ├── avatars/
│   └── room_photos/
└── project_config/         # Thư mục cấu hình chính của dự án Django
    ├── settings.py         # Các thiết lập chung
    ├── urls.py             # Cấu hình định tuyến URL
    └── wsgi.py             # Cấu hình WSGI

Hướng dẫn cài đặt và triển khai

Để khởi chạy hệ thống, hãy làm theo các bước dưới đây:

1. Yêu cầu môi trường

  • Python 3.8 trở lên
  • MySQL 5.7 trở lên
  • Công cụ quản lý gói pip

2. Sao chép mã nguồn

Di chuyển đến thư mục bạn muốn lưu trữ dự án và sao chép mã nguồn từ kho lưu trữ:

git clone <địa chỉ kho GitHub của dự án>
cd my_study_booking_project

3. Cài đặt các thư viện cần thiết

Sử dụng pip để cài đặt tất cả các phụ thuộc được liệt kê trong tệp requirements.txt:

pip install -r requirements.txt

4. Cấu hình cơ sở dữ liệu

Đầu tiên, tạo một cơ sở dữ liệu MySQL mới với bộ ký tự hỗ trợ Unicode đầy đủ:

CREATE DATABASE study_room_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Tiếp theo, cập nhật tệp project_config/settings.py với thông tin kết nối cơ sở dữ liệu của bạn. Hãy đảm bảo bạn thay thế các giá trị giữ chỗ bằng thông tin đăng nhập MySQL thực tế của mình:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'study_room_db', # Tên cơ sở dữ liệu bạn đã tạo
        'USER': 'your_db_user',   # Tên người dùng MySQL của bạn
        'PASSWORD': 'your_db_password', # Mật khẩu MySQL của bạn
        'HOST': 'localhost',      # Hoặc địa chỉ IP của máy chủ DB
        'PORT': '3306',           # Cổng MySQL mặc định
        'OPTIONS': {
            'charset': 'utf8mb4',
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        }
    }
}

5. Thực hiện di chuyển cơ sở dữ liệu (Migrations)

Chạy các lệnh di chuyển để tạo cấu trúc bảng trong cơ sở dữ liệu của bạn:

python manage.py makemigrations
python manage.py migrate

6. Tạo tài khoản siêu quản trị viên

Tạo một tài khoản quản trị viên để truy cập giao diện quản trị Django:

python manage.py createsuperuser

Bạn sẽ được nhắc nhập tên người dùng, email và mật khẩu cho tài khoản này.

7. Khởi động máy chủ phát triển

Chạy máy chủ phát triển cục bộ để kiểm tra hệ thống:

python manage.py runserver 0.0.0.0:8000

Sau khi máy chủ chạy, bạn có thể truy cập hệ thống qua trình duyệt tại địa chỉ http://localhost:8000. Để truy cập giao diện quản trị, hãy điều hướng đến http://localhost:8000/admin.

Hướng dẫn sử dụng

Đối với người dùng thông thường

  1. Đăng ký tài khoản: Truy cập trang chủ và chọn "Đăng ký". Điền các thông tin cần thiết như mã số sinh viên, email.
  2. Duyệt phòng: Sau khi đăng nhập, bạn có thể xem danh sách tất cả các phòng tự học có sẵn và chi tiết của từng phòng.
  3. Đặt chỗ: Chọn một phòng, xem bố cục chỗ ngồi, sau đó nhấn nút "Đặt chỗ" cho vị trí và khung giờ mong muốn.
  4. Quản lý đặt chỗ của tôi: Trong trang "Lịch đặt của tôi", bạn có thể xem lại, thay đổi hoặc hủy các lịch đặt đã tạo.
  5. Check-in: Khi đến phòng học, trong khung giờ đã đặt, hãy nhấp vào nút "Check-in" để xác nhận việc tham gia.
  6. Xem lịch sử: Trang "Lịch sử check-in" cung cấp cái nhìn tổng quan về các buổi học bạn đã tham gia.

Đối với quản trị viên

  1. Đăng nhập hệ thống quản trị: Truy cập http://localhost:8000/admin và đăng nhập bằng tài khoản siêu quản trị viên đã tạo.
  2. Quản lý không gian học tập: Thêm phòng mới, chỉnh sửa thông tin phòng hiện có (ví dụ: sức chứa, mô tả), hoặc điều chỉnh trạng thái hoạt động của phòng.
  3. Quản lý chỗ ngồi: Thực hiện thêm chỗ ngồi hàng loạt, cập nhật trạng thái của từng chỗ ngồi (ví dụ: hỏng, bảo trì) hoặc cấu hình các thuộc tính khác.
  4. Giám sát người dùng: Xem danh sách người dùng, chặn tài khoản có hành vi vi phạm hoặc kích hoạt lại các tài khoản đã bị khóa.
  5. Quản lý các đặt chỗ: Kiểm tra tất cả các lịch đặt của sinh viên, xử lý các trường hợp đặc biệt hoặc xem báo cáo tổng quan.
  6. Phân tích dữ liệu: Truy cập các số liệu thống kê về tỷ lệ sử dụng chỗ ngồi, người dùng hoạt động và các thông tin khác để tối ưu hóa quản lý.

Thiết kế cơ sở dữ liệu

Hệ thống sử dụng các bảng chính sau để lưu trữ dữ liệu:

  • user_accounts_customuser: Lưu trữ thông tin người dùng (mở rộng từ mô hình User của Django).
  • user_accounts_blacklistentry: Ghi nhận các tài khoản người dùng bị đưa vào danh sách đen.
  • learning_spaces_studyroom: Thông tin chi tiết về từng phòng tự học.
  • learning_spaces_seat: Dữ liệu về từng chỗ ngồi trong các phòng.
  • booking_management_reservation: Lưu trữ thông tin các lịch đặt chỗ của người dùng.
  • booking_management_checkinevent: Ghi lại các sự kiện check-in của người dùng.

Mối quan hệ chính

  • Một learning_spaces_studyroom có thể chứa nhiều learning_spaces_seat (quan hệ Một-Nhiều).
  • Một user_accounts_customuser có thể tạo nhiều booking_management_reservation (quan hệ Một-Nhiều).
  • Một learning_spaces_seat có thể có nhiều booking_management_reservation trong các khoảng thời gian khác nhau (quan hệ Một-Nhiều).
  • Mỗi booking_management_reservation có thể liên kết với một booking_management_checkinevent duy nhất (quan hệ Một-Một).

Hướng dẫn phát triển

Thêm chức năng mới

Khi mở rộng hệ thống hoặc thêm các tính năng mới, bạn nên tuân thủ quy trình sau:

  1. Định nghĩa các mô hình dữ liệu cần thiết trong tệp models.py của ứng dụng liên quan.
  2. Tạo và áp dụng các tệp di chuyển (migrations) để cập nhật cấu trúc cơ sở dữ liệu.
  3. Phát triển các hàm xem (view functions) hoặc lớp xem (class-based views) để xử lý logic kinh doanh.
  4. Thiết kế các biểu mẫu (forms) để thu thập và xác thực dữ liệu đầu vào từ người dùng.
  5. Cấu hình URL trong tệp urls.py để định tuyến yêu cầu đến các view phù hợp.
  6. Xây dựng các tệp mẫu HTML (templates) để hiển thị giao diện người dùng.
  7. Đăng ký mô hình mới vào giao diện quản trị Django (admin.py) nếu cần quản lý qua admin panel.

Quy tắc mã hóa

  • Tuân thủ các quy tắc mã hóa Python PEP 8.
  • Tách biệt rõ ràng các lớp Model, View và Form.
  • Sử dụng Class-Based Views của Django khi thích hợp.
  • Viết chú thích và docstrings đầy đủ cho mã nguồn.

Các vấn đề thường gặp

  • Lỗi kết nối cơ sở dữ liệu: Kiểm tra xem máy chủ MySQL đã hoạt động chưa và thông tin cấu hình cơ sở dữ liệu trong settings.py có chính xác không.
  • Không tải được tệp tĩnh (CSS/JS): Đảm bảo bạn đã chạy lệnh python manage.py collectstatic trong môi trường production và kiểm tra cài đặt STATIC_ROOT.
  • Lỗi khi tải lên hình ảnh: Kiểm tra quyền ghi của thư mục uploaded_media, đảm bảo Django có thể lưu trữ tệp vào đó.
  • Vấn đề múi giờ: Hệ thống mặc định sử dụng múi giờ Asia/Shanghai. Bạn có thể điều chỉnh biến TIME_ZONE trong settings.py cho phù hợp với múi giờ của mình.

Thẻ: Django python mysql Bootstrap jQuery

Đăng vào ngày 23 tháng 7 lúc 02:54