Để hoàn thành khóa luận này, chúng em xin gửi lời cảm ơn chân thành đến: Ban Giám hiệu trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM vì đã tạo điều kiện về cơ sở vật chất với hệ thống
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
NGUYỄN TRỌNG KHANH - 17520627
PHAN ANH TÚ - 17521204
KHÓA LUẬN TỐT NGHIỆP
XÂY DỰNG HỆ THỐNG GIA SƯ TRỰC TUYẾN
Building Online Tutor Application
KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM
Trang 2ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
NGUYỄN TRỌNG KHANH - 17520627
PHAN ANH TÚ - 17521204
KHÓA LUẬN TỐT NGHIỆP
XÂY DỰNG HỆ THỐNG GIA SƯ TRỰC TUYẾN
Building Online Tutor Application
KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM
GIẢNG VIÊN HƯỚNG DẪN Tiến sĩ Trần Sơn Hải Thạc sĩ Huỳnh Nguyễn Khắc Huy
TP HỒ CHÍ MINH, 2021
Trang 3DANH SÁCH HỘI ĐỒNG BẢO VỆ KHÓA LUẬN
Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định số ……… ngày
……… của Hiệu trưởng Trường Đại học Công nghệ Thông tin
Trang 4ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC
CÔNG NGHỆ THÔNG TIN
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc Lập - Tự Do - Hạnh Phúc
TP HCM, ngày… tháng… năm 2021
NHẬN XÉT KHÓA LUẬN TỐT NGHIỆP(CỦA CÁN BỘ HƯỚNG DẪN)
Tên khóa luận:
XÂY DỰNG HỆ THỐNG GIA SƯ TRỰC TUYẾN (Tên tiếng Anh: BUILDING ONLINE TUTOR APPLICATION) Nhóm SV thực hiện: Cán bộ hướng dẫn:
Đánh giá Khóa luận
1 Về cuốn báo cáo:
Số trang 154 Số chương 4
Số bảng số liệu 53 _ Số hình vẽ 29 _
Số tài liệu tham khảo 11 _ Sản phẩm 1
Một số nhận xét về hình thức cuốn báo cáo:
Trang 6ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC
CÔNG NGHỆ THÔNG TIN
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc Lập - Tự Do - Hạnh Phúc
TP HCM, ngày… tháng… năm 2021
NHẬN XÉT KHÓA LUẬN TỐT NGHIỆP(CỦA CÁN BỘ PHẢN BIỆN)
Tên khóa luận:
XÂY DỰNG HỆ THỐNG GIA SƯ TRỰC TUYẾN (Tên tiếng Anh: BUILDING ONLINE TUTOR APPLICATION) Nhóm SV thực hiện: Cán bộ phản biện:
Đánh giá Khóa luận
5 Về cuốn báo cáo:
Số trang 154 Số chương 4
Số bảng số liệu 53 _ Số hình vẽ 29 _
Số tài liệu tham khảo 11 _ Sản phẩm 1
Một số nhận xét về hình thức cuốn báo cáo:
Trang 8LỜI CẢM ƠN
Sau quá trình học tập và rèn luyện tại khoa Công nghệ phần mềm trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM chúng em đã được trang bị các kiến thức cơ bản, các kỹ năng thực tế để có thể hoàn thành Khóa luận tốt nghiệp của mình
Để hoàn thành khóa luận này, chúng em xin gửi lời cảm ơn chân thành đến:
Ban Giám hiệu trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM vì đã tạo điều kiện về cơ sở vật chất với hệ thống thư viện hiện đại, đa dạng các loại sách, tài liệu thuận lợi cho việc tìm kiếm, nghiên cứu thông tin
Chúng em xin gửi lời cảm ơn chân thành đến thầy Trần Sơn Hải và thầy Huỳnh Nguyễn Khắc Huy đã tận tình giúp đỡ, định hướng cách tư duy và cách làm việc
khoa học Đó là những góp ý hết sức quý báu không chỉ trong quá trình thực hiện luận văn này mà còn là hành trang tiếp bước cho chúng em trong quá trình học tập và lập nghiệp sau này
Và cuối cùng, chúng em xin gửi lời cảm ơn đến gia đình, tất cả thầy cô trong khoa, bạn bè là những người luôn sẵn sàng sẻ chia và giúp đỡ trong học tập và cuộc sống Mong rằng, chúng ta sẽ mãi mãi gắn bó với nhau
Trong quá trình làm khóa luận này chúng em không tránh khỏi được những sai sót, chúng em kính mong nhận được sự chỉ dẫn và góp ý của quý thầy cô để khóa luận được hoàn thiện hơn
Chúng em xin chân thành cảm ơn Xin chúc những điều tốt đẹp nhất sẽ luôn đồng hành cùng mọi người
Thành phố Hồ Chí Minh, tháng năm 2021
Sinh viên
Trang 9ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC
CÔNG NGHỆ THÔNG TIN
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc Lập - Tự Do - Hạnh Phúc
ĐỀ CƯƠNG CHI TIẾT
TÊN ĐỀ TÀI: Xây dựng hệ thống tìm kiếm gia sư trực tuyến
Cán bộ hướng dẫn: TS Trần Sơn Hải, ThS Huỳnh Nguyễn Khắc Huy
Thời gian thực hiện:Từ ngày…01/03/2021………… đến ngày…26/06/2021…………
Sinh viên thực hiện:
Nguyễn Trọng Khanh - 175206271
Phan Anh Tú – 17521204
Nội dung đề tài:(Mô tả chi tiết mục tiêu, phạm vi, đối tượng, phương pháp thực hiện,
kết quả mong đợi của đề tài)
1 Lý do chọn đề tài
Trong thời đại cách mạng 4.0 hiện nay, internet phát triển một cách mạnh mẽ và
ảnh hưởng lớn đến mọi hoạt động của con người Ngoài ra trong xã hội phát triển,
các bậc phụ huynh không có nhiều thời gian và những kiến thức đổi mới liên tục
để giúp đỡ con họ trong học tập, nên dịch vụ gia sư ngày càng được đông đảo các
phụ huynh, học sinh lựa chọn nhằm giúp con em mình đạt được những mục tiêu
nhất định trong học tập Hệ thống tìm kiếm gia sư trực tuyến ra đời giúp các phụ
huynh, học sinh tìm kiếm gia sư trực tuyến dễ dàng, giúp tiết kiệm thời gian đến
trực tiếp các trung tâm để tìm kiếm gia sư Đồng thời, các bạn sinh viên, người có
bằng cấp, chuyên môn trong giảng dạy có nhu cầu trở thành một gia sư có thể đăng
ký trở thành ga sư
2 Phạm vi
Phạm vi của đề tài gồm:
- Xây dựng website quản lý hệ thống dành cho admin
- Xây dựng website dành cho người dùng có nhu cầu tìm kiếm gia sư và người
muốn trở thành gia sư
2.1 Các tính năng chính
Trang 10• Quản lý danh sách gia sư
• Duyệt yêu cầu đăng ký làm gia sư
• Thống kế tìm kiếm, tin đăng, lĩnh vực, môn học
• Quản lý tin đăng
- Dành cho người dùng
Người tìm gia sư:
• Tìm kiếm gia sư
• Đăng tin tìm gia sư
• Xem thông tin gia sư
• Chat trao đổi trực tuyến với gia sư
Gia sư:
• Đăng tin ứng tuyển
• Tìm kiếm tin đăng tìm gia sư
• Chat trao đổi trực tuyến với người tìm
- Phụ huynh, học sinh, có nhu cầu thuê gia sư dạy kèm trong học tập
- Sinh viên, người có bằng cấp, chuyên môn trong giảng dạy có nhu cầu trở thành một gia sư
4 Mục tiêu
- Hiểu rõ quy trình làm việc để tạo ra một ứng dụng công nghệ thông tin
- Hiểu và áp dụng được Máy học vào ứng dụng
- Tạo ra 1 ứng dụng sau cùng có thể sử dụng được và đáp ứng cho nhu cầu đề ra
- Thực hiện được những tính năng đã đề ra ban đầu
5 Phương pháp thực hiện
- Các thành viên nhóm lập kế hoạch thực hiện
- Trao đổi thường xuyên với giảng viên hướng dẫn
- Khảo sát nhu cầu tìm kiếm gia sư trên các mạng xã hội, các website tìm kiếm việc làm, tìm kiếm gia sư
- Phân tích thiết kế hệ thống, thiết kế giao diện, database
- Máy học, thuật toán áp dụng vào việc tìm kiếm, gợi ý, sàng lọc xếp loại gia sư
7 Kết quả mong muốn
- Xây dựng được ứng dụng với những tính năng đã đề ra ban đầu
Trang 11- Website có giao diện đẹp, thân thiện, dễ sử dụng
- Hiểu được kiến thức về máy học
- Áp dụng máy học thành công vào ứng dụng, giúp việc tìm kiếm, phân loại gia
sư hiệu quả
Kế hoạch thực hiện:(Mô tả kế hoạch làm việc và phân công công việc cho từng sinh
viên tham gia)
- Phân tích, xác định, đặc tả chức năng chính của hệ thống
- Xây dựng ứng dụng ở nền tảng web, backend , web admin
- Liên tục nghiệm thu, kiểm thử
- Nghiên cứu về các hướng tiếp cận đã có cho bài toán tính năng nổi bật
- Lựa chọn và thử thực hiện hoá các giải pháp
- Tích hợp giải pháp cuối cùng vào ứng dụng
Tú, Khanh
Trang 12- Thực hiện kiểm thử các luồng chức năng
- Tiến hành sửa các lỗi được tìm ra
- Thực hiện kiểm thử trên môi trường production
- Hoàn thiện báo cáo, chuẩn bị slide, nội dung demo
- Chuẩn bị danh sách các câu hỏi cho phản biện và bảo vệ
- Tiếp thu và sửa chửa báo cáo cũng như sản phẩm
Nguyễn Trọng Khanh
Sinh viên 2 (Ký tên và ghi rõ họ tên)
Phan Anh Tú
Trang 13MỤC LỤC
CHƯƠNG 1 GIỚI THIỆU CHUNG 1
1.1 Lý do chọn đề tài 1
1.2 Tính năng nổi bật về chức năng của đề tài 1
1.3 Đối tượng nghiên cứu: 1
1.4 Phạm vi thực hiện 2
1.5 Phương pháp nghiên cứu 2
CHƯƠNG 2 KIẾN THỨC NỀN TẢNG 3
2.1 Kiến trúc hệ thống 3
2.2 Tổng quan về mô hình MVC 4
2.2.1 Khái niệm 4
2.2.2 Các thành phần trong mô hình MVC 4
2.2.3 Ưu điểm MVC 5
2.2.4 Nhược điểm 5
2.3 Tổng quan về Flask 5
2.3.1 Khái niệm 5
2.3.2 Tạo sao chọn Flask để phát triển server 5
2.4 Hệ quản trị cơ sở dữ liệu PostgreSQL 7
2.5 Tổng quan về ReactJs 8
2.5.1 Giới thiệu nền tảng ReactJs 8
2.5.2 Tại sao chọn ReactJs 8
2.6 Google maps Api 9
Trang 142.6.1 Khái niệm 9
2.6.2 Cách lấy Google Maps Api key 9
2.7 ElasticSearch 11
2.7.1 Khái niệm 11
2.7.2 Cách thức hoạt động 12
2.7.3 Ưu điểm 12
2.7.4 Nhược điểm 12
2.7.5 Các khái niệm cơ bản trong Elasticsearch 13
2.7.6 Cài đặt trên hệ điều hành Ubuntu 14
2.7.7 Sử dụng Elasticsearch trên Flask 16
CHƯƠNG 3 XÂY DỰNG HỆ THỐNG 18
3.1 Xây dựng kiến trúc hệ thống 18
3.1.1 Xác định yêu cầu hệ thống 18
3.1.2 Phân tích yêu cầu hệ thống 19
3.2 Phân tích thiết kế hệ thống 22
3.2.1 Sơ đồ Use Case 22
3.2.2 Sơ đồ hoạt động 62
3.2.3 Sơ đồ tuần tự 100
3.2.4 Sơ đồ lớp 124
3.2.5 Phân tích và thiết kế CSDL 125
3.3 Thiết kế giao diện 134
CHƯƠNG 4 KẾT LUẬN, HƯỚNG PHÁT TRIỂN 152
4.1 Ưu điểm 152
4.2 Nhược điểm 152
Trang 154.3 Về mặt kiến thức tổng quát 152 4.4 Về mặt công nghệ 152
4.5 Hướng phát triển 153
Trang 16DANH MỤC HÌNH
Hình 2-1.Kiến trúc hệ thống 3
Hình 2-2 Mô hình MVC 4
Hình 3-1 Quy trình của TutorOnline 18
Hình 3-2 UseCase Tổng Quát 23
Hình 3-3 Biểu đồ lớp 124
Hình 3-4 Giao diện trang chủ 135
Hình 3-5 Giao diện trang chủ (gia sư nổi bật trong tuần) 135
Hình 3-6 Giao diện danh sách bài đăng tìm học viên 136
Hình 3-7 Giao diện tìm kiếm bài đăng qua trên bản đồ 136
Hình 3-8 Giao diện danh sách bài đăng tìm gia sư 137
Hình 3-9 Giao diện tìm kiếm bài đăng bàng bản đồ 138
Hình 3-10 Giao diện danh sách gia sư 138
Hình 3-11 Giao diện tìm gia sư bằng bản đồ 139
Hình 3-12 Giao diện Thông tin bài viết 139
Hình 3-13 Giao diện Đăng ký tài khoản 140
Hình 3-14 Giao diện đăng bài viết 141
Hình 3-15 Giao diện thông tin người dùng 142
Hình 3-16 Giao diện danh sách bài viết của bạn 143
Hình 3-17 Giao diện danh sách bài viết bạn đã theo dõi 143
Hình 3-18 Giao diện danh sách bài viết đã đăng kí 144
Hình 3-19 Giao diện danh sách các lớp bạn đã tham gia 145
Hình 3-20Giao diện quản lí lớp người dùng đăng kí bạn 145
Hình 3-21 Giao diện theo dõi đanh giá người dùng 146
Hình 3-22 Giao diện mời gia sư dạy 146
Hình 3-23 Giao diện chỉnh sửa thông tin cá nhân 147
Hình 3-24 Giao diện đăng kí làm gia sư 148
Hình 3-25 Giao diện chỉnh sửa thông tin gia sư 149
Hình 3-26 Giao diện đăng bài tìm kiếm học viên của gia sư 150
Trang 17Hình 3-27 Giao diện thông tin gia sư 151
DANH MỤC BẢNG Bảng 3-1 Danh sách các Actor 22
Bảng 3-2 Danh sách các use case 25
Bảng 3-3 Phân rã use case đăng nhập 27
Bảng 3-4 Phân rã use case quên mật khẩu 27
Bảng 3-5 Phân rã use case thay đổi mật khẩu 28
Bảng 3-6 Phân rã use case thay đổi thông tin người dùng 29
Bảng 3-7 Phân rã use case xem chi tiết profile 30
Bảng 3-8 Phân rã use case đăng ký gia sư 30
Bảng 3-9 Phân rã use case đăng bài viết tìm kiếm gia sư 32
Bảng 3-10 Phân rã use case đăng bài viết tìm học viên 33
Bảng 3-11 Phân rã use case sửa thông tin bài viết 34
Bảng 3-12 Phân rã use case hiển thị danh sách bài viết đã đăng 34
Bảng 3-13 Phân rã use case tìm kiếm bài viết tìm gia sư 36
Bảng 3-14 Phân rã use case tìm kiếm bài viết tìm học viên 37
Bảng 3-15 Phân rã use case tìm kiếm gia sư 38
Bảng 3-16 Phân rã use case hiển thị vị trí bài viết tìm kiếm gia sư trên bản đồ 39
Bảng 3-17 Phân rã use case xem chi tiết thông tin bài viết 41
Bảng 3-18 Phân rã use case xem chi tiết thông tin gia sư 42
Bảng 3-19 Phân rã use case xem chi tiết thông tin học viên 43
Bảng 3-20 Phân rã use case đăng ký dạy trong bài viết tìm gia sư 44
Bảng 3-21 Phân rã use case hiển thị danh sách chờ duyệt 45
Bảng 3-22 Phân rã use case hiển thị danh sách đã yêu cầu 45
Bảng 3-23 Phân rã use case hủy đăng ký bài viết 46
Bảng 3-24 Phân rã use case chấp nhận yêu cầu 47
Bảng 3-25 Phân rã use case từ chối yêu cầu 48
Trang 18Bảng 3-26 Phân rã use case danh sách lớp đã dạy 49
Bảng 3-27 Phân rã use case đăng ký lớp học trong bài viết tìm học viên 50
Bảng 3-28 Phân rã use case hiển thị danh sách chờ duyệt 51
Bảng 3-29 Phân rã use case hiển thị danh sách đã yêu cầu 52
Bảng 3-30 Phân rã use case hủy đăng ký yêu cầu 52
Bảng 3-31 Phân rã use case chấp nhận yêu cầu 53
Bảng 3-32 Phân rã use case từ chối yêu cầu 54
Bảng 3-33 Phân rã use case hiện thị danh sách lớp đã học 55
Bảng 3-34 Phân rã use case mời gia sư 55
Bảng 3-35 Phân rã use case đánh giá 57
Bảng 3-36 Phân rã use case xóa đánh giá 58
Bảng 3-37 Phân rã use case sửa đánh giá 59
Bảng 3-38 Phân rã use case xem đánh giá của học viên 59
Bảng 3-39 Phân rã use case theo dõi bài viết 61
Bảng 3-40 Phân rã use case xem danh sách bài viết đang theo dõi 61
Bảng 3-41 Danh sách các sơ đồ hoạt động 63
Bảng 3-42 Danh sách các sơ đồ tuần tự 101
Bảng 3-43 Các lớp của sơ đổ lớp 125
Bảng 3-44 Các đối tượng và thuộc tính của đối tượng 126
Bảng 3-45 Bảng User 127
Bảng 3-46 Bảng Tutor 129
Bảng 3-47 Bảng Post 130
Bảng 3-48 Bảng Schedule 131
Bảng 3-49 Bảng Follow 131
Bảng 3-50 Bảng Registration 132
Bảng 3-51 Bảng Class 133
Bảng 3-52 Bảng Rate 133
Bảng 3-53 Bảng Image 134
Trang 19nối các ứng dụng và thư viện
khác nhau
SMTP Simple Mail Transfer Protocol Giao thức truyền tải thư tín
đơn giản hóa
HTML Hypertext Markup Language HTML được sử dụng để tạo
và cấu trúc các thành phần trong trang web hoặc ứng dụng, phân chia các đoạn văn, heading, titles, blockquotes…
Trang 20TÓM TẮT KHÓA LUẬN
Khóa luận “XÂY DỰNG HỆ THỐNG GIA SƯ TRỰC TUYẾN” gồm 04 chương:
Chương 1: Giới thiệu về đề tài, đưa ra các điểm nổi bật so với các hệ thống trước
Tiếp đến là đề xuất các giải pháp để giải quyết các vấn đề đã đặt ra Ngoài ra, chương
1 cũng đề cập đến đối tượng nghiên cứu, phạm vi đề tài, phương pháp nghiên cứu
Chương 2: Trình bày các kiến thức nền tảng, các công nghệ được sử dụng để xây
dựng ứng dụng gia sư
Chương 3: Trình bày chi tiết quy trình xây dựng hệ thống, từ xác định và phân tích
yêu cầu bài toán cho đến xây dựng CSDL, cuối cùng là xây dựng giao diện cho website
Chương 4: Kết luận, rút ra được các ưu nhược điểm của hệ thống và hướng phát triển trong tương lai
Trang 21Chương 1 GIỚI THIỆU CHUNG
1.1 Lý do chọn đề tài
Trong thời đại cách mạng 4.0 hiện nay, internet phát triển một cách mạnh mẽ và ảnh hưởng lớn đến mọi hoạt động của con người Ngoài ra trong xã hội phát triển, các bậc phụ huynh không có nhiều thời gian và những kiến thức đổi mới liên tục
để giúp đỡ con họ trong học tập, nên dịch vụ gia sư ngày càng được đông đảo các phụ huynh, học sinh lựa chọn nhằm giúp con em mình đạt được những mục tiêu nhất định trong học tập Hệ thống tìm kiếm gia sư trực tuyến ra đời giúp các phụ huynh, học sinh tìm kiếm gia sư trực tuyến dễ dàng, giúp tiết kiệm thời gian đến trực tiếp các trung tâm để tìm kiếm gia sư Đồng thời, các bạn sinh viên, người có bằng cấp, chuyên môn trong giảng dạy có nhu cầu trở thành một gia sư có thể đăng ký trở thành ga sư
1.2 Tính năng nổi bật về chức năng của đề tài
- Tìm kiếm bài viết bằng google map
• Có thể tìm kiếm bài viết của người dung khác một cách trực quan hơn bằng các điểm đã được định vị trên bản đồ, có thể phân loại dễ dàng hơn ngay trên bản đồ
- Tài khoản
• Gia sư và học viên có thể đăng bài viết tìm kiếm
• Quản lý bài viết mình đã đăng kí, theo dõi, và dễ dàng quản lí người dùng đăng kí của bạn
1.3 Đối tượng nghiên cứu:
Khoá luận này hướng đến nghiên cứu các đối tượng sau:
- Các công nghệ:
• Flask
Trang 22• ReactJs
• PostgreSql
• ElasticSearch
• Google maps Api
• Visual studio code
• Pycharm
- Công cụ tìm kiếm: ElasticSearch
- Đối tượng trong phạm vị đề tài hướng đến:
• Người tìm kiếm gia sư
1.5 Phương pháp nghiên cứu
Nhóm đã sử dụng các phương pháp nghiên cứu:
- Phương pháp đọc tài liệu
- Phương pháp phân tích các website tìm kiếm gia sư hiện có
- Phương pháp thực nghiệm
Trang 23Chương 2 KIẾN THỨC NỀN TẢNG
2.1 Kiến trúc hệ thống
Hình 2-1.Kiến trúc hệ thống
Trang 242.2 Tổng quan về mô hình MVC
2.2.1 Khái niệm
Hình 2-2 Mô hình MVC MVC là từ viết tắt của 'Model View Controller' Nó đại diện cho các nhà phát triển kiến trúc áp dụng khi xây dựng các ứng dụng Với kiến trúc MVC, chúng ta xem xét cấu trúc ứng dụng liên quan đến cách luồng dữ liệu của ứng dụng của chúng ta hoạt động như thế nào
2.2.2 Các thành phần trong mô hình MVC
Mô hình MVC được chia làm 3 lớp xử lý gồm Model – View – Controller :
- Model : là nơi chứa những nghiệp vụ tương tác với dữ liệu hoặc hệ quản trị
cơ sở dữ liệu (mysql, mssql… ); nó sẽ bao gồm các class/function xử lý nhiều nghiệp vụ như kết nối database, truy vấn dữ liệu, thêm – xóa – sửa dữ liệu…
- View : là nới chứa những giao diện như một nút bấm, khung nhập, menu, hình
ảnh… nó đảm nhiệm nhiệm vụ hiển thị dữ liệu và giúp người dùng tương tác với hệ thống
Trang 25- Controller : là nới tiếp nhận những yêu cầu xử lý được gửi từ người dùng, nó
sẽ gồm những class/ function xử lý nhiều nghiệp vụ logic giúp lấy đúng dữ liệu thông tin cần thiết nhờ các nghiệp vụ lớp Model cung cấp và hiển thị dữ liệu đó ra cho người dùng nhờ lớp View
- Sự tương tác giữa các thành phần:
- Controller tương tác với qua lại với View
- Controller tương tác qua lại với Model
- Model và View không có sự tương tác với nhau mà nó tương tác với nhau thông qua Controller
2.2.3 Ưu điểm MVC
- Trình tự xử lý rất rõ ràng
- Mô hình MVC quy hoạch các class/function vào các thành phần riêng biêt Controller - Model - View, việc đó làm cho quá trình phát triển - quản lý - vận hành - bảo trì web diễn ra thuận lợi hơn, tạo ra được các chức năng chuyên biệt hoá đồng thời kiểm soát được luồng xử lý
- Tạo mô hình chuẩn cho dự án, khi người có chuyên môn ngoài dự án tiếp cận với dự án dễ dàng hơn
- Mô hình đơn giản, dễ hiểu, xử lý những nghiệp vụ đơn giản, và dễ dàng triển khai với các dự án nhỏ
cụ, các thư viện và các công nghệ hỗ trợ bạn làm những công việc trên
2.3.2 Tạo sao chọn Flask để phát triển server
- Là một micro web framework:
• Flask là môt micro web framework được viết bằng Python, không yêu cầu tool hay thư viện cụ thể nào Flask cung cấp chức năng “súc
Trang 26tích” nhất cho ứng dụng web nhưng người dùng có thể mở rộng bất
cứ lúc nào
- Dễ cài đặt và triển khai:
• Sau khi cài đặt Python, để cài đặt Flask chỉ cần bạn gõ lệnh “pip install Flask” là đã có thể dễ dàng tạo một ứng dụng một cách nhanh chóng
- Giúp bạn tập trung xây dựng ý tưởng và mục tiêu riêng cho mình:
• Flask có kiến trúc nhỏ, gọn nên bạn hoàn toàn không bị bó buộc bởi
bộ khung cồng kềnh, không gặp bất cứ khó khăn nào khi cấu hình hay tổ chức ứng dụng Không những thế, Flask còn có các ưu điểm nổi bật như: cực kỳ linh hoạt, tối giản, dễ tìm hiểu và sử dụng, định tuyến dễ dàng, rất dễ mở rộng Vì vậy, công việc chính của bạn là chỉ cần xác định ý tưởng, mục tiêu, tập trung vào việc xây dựng ứng dụng web mà thôi
- Nguồn tài liệu tham khảo rất phong phú đa dạng:
• Flask cung cấp rất nhiều tài liệu từ cài đặt đến thực hiện và triển khai, từ hướng dẫn nhanh đến hướng dẫn chi tiết Bạn có thể dễ dàng tìm kiếm, tham khảo, học tập về lập trình web application với Flask framework miễn phí trên Internet
- Cộng đồng lớn:
• Cộng đồng những người sử dụng Flask Python trải rộng trên khắp thế giới, bạn có thể liên hệ, trao đổi hoặc tìm kiếm sự giúp đỡ từ cộng đồng qua mạng xã hội hoặc các diễn đàn online một cách dễ dàng
- Một số ứng dụng được phát triển bằng PHP:
• Red Hat
Trang 27• Netflix
• Mozilla
2.4 Hệ quản trị cơ sở dữ liệu PostgreSQL
- PostgreSQL là một hệ quản trị cơ sở dữ liệu quan hệ – đối tượng, được phát triển bởi Khoa Điện toán, Đại học California – Hoa Kỳ dựa trên Postgres bản 4.2 Chương trình này đã mở đường cho nhiều khái niệm về hệ quản trị dữ liệu thương mại sau này
- Ban đầu, hệ quản trị được thiết kế để chạy trên các nền tảng tương tự như Unix Sau này, PostgreSQL được điều chỉnh trở nên linh động và chạy trên nhiều nền tảng khác nhau như Windows, Mac OS X, Solaris với nhiều tính năng và đặc điểm nổi bật
- PostgreSQL là mã nguồn mở miễn phí, được xây dựng theo chuẩn SQL99 Người dùng có thể tự do sử dụng, chỉnh sửa và phân bổ PostgreSQL theo nhiều hình thức khác nhau
- So với nhiều hệ quản trị cơ sở dữ liệu khác, PostgreSQL không quá yêu cầu
về công tác bảo trì bởi tính ổn định cao, có thể phát triển nhiều ứng dụng khác nhau với chi phí tương đối thấp
Các tính năng chính:
- Tương thích với các nền tảng khác nhau sử dụng tất cả các ngôn ngữ chính và phần mềm trung gian
- Nó cung cấp một cơ chế khóa tinh vi nhất
- Hỗ trợ kiểm soát đồng thời nhiều phiên bản
- Mature Server-Side Lập trình chức năng
- Tuân thủ tiêu chuẩn SQL ANSI
- Hỗ trợ đầy đủ cho kiến trúc mạng client – server
- SSL sao chép dựa trên đăng nhập và kích hoạt
- Máy chủ dự phòng và tính sẵn sàng cao (high availability)
- Tương thích hướng đối tượng và tương thích ANSI-SQL2008
- Hỗ trợ cho JSON cho phép liên kết với các kho lưu trữ dữ liệu khác như NoQuery, hoạt động như một trung tâm liên kết cho cơ sở dữ liệu polyglot
Ưu điểm:
- PostgreSQL có thể chạy các trang web và ứng dụng web động với LAMP
- Ghi nhật ký viết trước của PostgreSQL làm cho nó trở thành một cơ sở dữ liệu
có khả năng chịu lỗi cao
- Mã nguồn PostgreSQL có sẵn miễn phí theo giấy phép nguồn mở Điều này cho phép bạn tự do sử dụng, sửa đổi và triển khai nó theo nhu cầu kinh doanh của bạn
- PostgreSQL hỗ trợ các đối tượng địa lý để bạn có thể sử dụng nó cho các dịch
vụ dựa trên vị trí và hệ thống thông tin địa lý
Trang 28- PostgreSQL hỗ trợ các đối tượng địa lý để nó có thể được sử dụng làm kho lưu trữ dữ liệu không gian địa lý cho các dịch vụ dựa trên vị trí và hệ thống thông tin địa lý
- Những thay đổi được thực hiện để cải thiện tốc độ đòi hỏi nhiều công việc hơn MySQL vì PostgreSQL tập trung vào khả năng tương thích
- Nhiều ứng dụng nguồn mở hỗ trợ MySQL, nhưng có thể không hỗ trợ PostgreSQL
- Về số liệu hiệu suất, nó chậm hơn MySQL
2.5 Tổng quan về ReactJs
2.5.1 Giới thiệu nền tảng ReactJs
Reactjs là một thư viện Javascript mã nguồn mở hỗ trợ xây dựng các thành phần giao diện nhanh gọn và tiện lợi Bình thường các lập trình viên sẽ nhúng
javascript vào code HTML thông qua các attribute như AngularJS nhưng với
Reactjs làm việc như một thư viện cho phép nhúng HTML vào javascript thông qua JSX Qua đó bạn có thể dễ dàng lồng các đoạn HTML vào trong JSX làm cho các component dễ hiểu và dễ sử dụng hơn
2.5.2 Tại sao chọn ReactJs
• ReactJS giúp cho việc viết các đoạn code Javascript sẽ trở nên dễ dàng hơn vì
nó sử dụng một cú pháp đặc biệt đó chính là cú pháp JSX Thông qua JSX cho phép nhúng code HTML và Javascrip
• ReactJS cho phép Developer phá vỡ những cấu tạo UI phức tạp thành những component độc lập Dev sẽ không phải lo lắng về tổng thể ứng dụng web, giờ đây Developer dễ dàng chia nhỏ các cấu trúc UI/UX phức tạp thành từng component đơn giản hơn
• Đi kèm với ReactJS là rất nhiều các công cụ phát triển giúp cho việc debug code một cách dễ dàng hơn
• Một trong những ưu điểm nữa của ReactJS đó là sự thân thiện với SEO Hầu như các JS Frameworks không thân thiện với các tìm kiếm mặc dù đã được cải thiện nhiều nhưng dưới sự hỗ trợ của các render dữ liệu trả về dưới dạng web page giúp cho SEO chuẩn hơn
Trang 292.6 Google maps Api
2.6.1 Khái niệm
Google maps Api Là một phương thức cho phép 1 website B sử dụng dịch vụ bản
đồ của website A (gọi là Map API) và nhúng vào website của mình (site B) Site A
ở đây là google map, site B là các website cá nhân hoặc tổ chức muốn sử dụng dịch
vụ của google (di chuột, room, đánh dấu trên bản đồ…)
Các ứng dụng xây dựng trên maps được nhúng vào trang web cá nhân thông qua các thẻ javascripts do vậy việc sử dụng API google rất dễ dàng
2.6.2 Cách lấy Google Maps Api key
Để có thể lấy được key api của bất kì dịch vụ nào điều đầu tiên bạn cần có là: có thể tạo được một project trên https://console.cloud.google.com/?hl=vi&pli=1
Sau khi tạo được project, thì bạn chọn project mình vừa tạo, màn hình sẽ chuyển sang trang report tình hình sử dụng api của ứng dụng
Trang 30Chọn “Go to APIs overview” và click chọn thư viện api bên tay trái, chọn thư viện api mình cần sử dụng, click “enable”, như trong hình dưới là dịch vụ Google Maps Javascript Api
Màn hình hiển thị như hình dưới là thành công
Trang 312.7 ElasticSearch
2.7.1 Khái niệm
- Elasticsearch là một công cụ tìm kiếm search engine dựa trên nền tảng Apache Lucene Nó cung cấp một bộ máy tìm kiếm dạng phân tán, có đầy đủ công cụ với một giao diện web HTTP có hỗ trợ dữ liệu JSON
- Elasticsearch là một mã nguồn mở được phát triển bằng ngôn ngữ Java, thực chất hoạt như một Web Server, có khả năng tìm kiếm nhanh chóng (near realtime) thông qua giao thức RESTful
- Elasticsearch chạy trên Server riêng và đồng thời giao tiếp thông qua RESTful do vậy nên nó không phụ thuộc vào Client hay hệ thống Nên việc tích hợp nó vào hệ thống
là dễ dàng, chỉ cần gửi request HTTP sẽ nhận được kết quả trả về
- Với các dữ liệu nhỏ và vừa, người dùng có thể tìm kiếm trên file, trên các nền tảng
dữ liệu như Oracle, MySQL, MongoDB… nhưng đối với những trường hợp dữ liệu lớn thì Elasticsearch giúp cho việc tìm kiếm trở nên tối ưu và hiệu quả rất lớn
Trang 32Hình hoạt động của Elasticsearch
2.7.2 Cách thức hoạt động
- Toàn bộ dữ liệu tổng hợp, dữ liệu được người dùng tải lên sẽ lưu vào database,
tiếp theo chúng được đồng bộ hóa sang Elasticsearch Từ đó, khi người dùng
tìm kiếm thì sẽ tìm kiếm trên Elasticsearch, tốc độ vừa nhanh, vừa giảm tải
cho database
2.7.3 Ưu điểm
- Khả năng tìm kiếm mạnh mẽ dựa trên Apache Lucene và phân tích dữ liệu
- Khả năng mở rộng theo chiều ngang Dù tìm kiếm từ khóa sai chính tả hay
không đúng cú pháp thì vẫn được hỗ trợ trả về kết quả rất tốt
- Hỗ trợ tìm kiếm khi từ khóa tìm kiếm có thể bị lỗi
- Hỗ trợ đặc tả những câu truy vấn phức tạp một cách cụ thể và rõ ràng bằng
JSON, các Structured Query DSL (Domain– Specific Language),
Elasticsearch client như Python,Java, Php, JS, Ruby,
2.7.4 Nhược điểm
- Elasticsearch được tạo ra với mục đích tìm kiếm, nhưng với những nhiệm vụ
khác ngoài search Curd thì Elastic yếu hơn so với những database khác như
MongoDB, MySQL… Do vậy người ta ít khi dùng Elasticsearch làm database
chính như MongoDB hay MySQL
- Trong Elasticsearch không có khái niệm database transaction, vì thế
Elasticsearch không đảm bảo được dữ liệu của các hoạt động như Insert,
Update hay Delete, khi chúng ta thực hiện thay đổi nhiều bản ghi nếu xảy ra
lỗi làm logic sai hay dẫn tới mất dữ liệu Đây cũng là một phần khiến
Elasticsearch không nên là database primary
- Đối với những hệ thống thường xuyên cập nhật dữ liệu thì việc sử dụng
Elasticsearch sẽ rất tốn kém cho việc đánh index dữ liệu
- Việc tìm kiếm của Elasticsearch được phân trang, thông qua hai giá
trị “from” và “size” Việc phân trang này diễn ra rất phổ biến, trên hầu hết các
Trang 33ứng dụng và thậm chí, trên giao diện, người dùng có thể dễ dàng nhảy từ trang này sang trang khác Nhưng Elasticsearch có những vấn đề của riêng nó liên quan đến phân trang, khi mà người dùng nhảy đến những trang quá lớn, nhất
là trang cuối cùng Với Elasticsearch, nó sẽ phải thực hiện tính toán, đánh giá
độ tương quan cho từng trang Ví dụ, bạn cần truy cập trang thứ 20, thì Elasticsearch sẽ phải tính toán và thực hiện tìm kiếm trên tất cả các trang từ 1– 20 Trong trường hợp thì sẽ là thực hiện tính toán trên 20 * 20 * 5 =
2000 bản ghi (nếu phân trang là 20 bản ghi mỗi trang) Số trang càng lớn, mức
độ tính toán càng nhiều Do đó, trên thực tế, người dùng sẽ phải tìm cách giải quyết vấn đề này, dù tỉ lệ người dùng tìm đến các trang sâu như vậy là không nhiều
2.7.5 Các khái niệm cơ bản trong Elasticsearch
Có 2 kiểu đánh Index và Forward Index và Inverted Index:
• Inverted Index đánh theo keyword: words – > pages
• Forward Index đánh theo nội dung: pages – > words
Trang 34Chúng ta có thể thấy việc đánh theo keyword thì việc tìm kiếm sẽ nhanh hơn việc chúng ta phải tìm kiếm theo từng page Elasticsearch sử dụng Apache lucence để quản lý và tạo Inverted Index
- Shard
Shard là một đối tượng của Lucence, là tập hợp con của một Index Một Index
có thể được lưu trên nhiều Shard
Một Node bao gồm nhiều Shard, Shard chính là đối tượng nhỏ nhất hoạt động
ở mức thấp nhất, đóng vai trò lưu trữ dữ liệu
Chúng ta sẽ không bao giờ làm việc với các Shard vì Elasticsearch sẽ hỗ trợ chúng ta toàn bộ việc giao tiếp cũng như tự động thay đổi các Shard khi cần thiết
Elasticsearch cung cấp 2 cơ chế của Shard đó là primary Shard và Replica Shard
Primary Shard sẽ lưu trữ dữ liệu và đánh Index, sau khi đánh dữ liệu xong sẽ được vận chuyển đến các Replica Shard, mặc định của Elasticsearch mỗi index
sẽ có 5 Primary Shard thì sẽ đi kèm với một Replica Shard
Replica Shard là nơi lưu trữ dữ liệu nhân bản của Elasticsearch, đóng vai trò đảm bảo tính toàn vẹn dữ liệu khi Primary Shard xảy ra vấn đề, ngoài ra nó còn giúp tăng tốc độ tìm kiếm vì chúng ta có thể cấu hình lượng Replica Shard nhiều hơn cấu hình mặc định của Elasticsearch
- Node
Là trung tâm hoạt động của Elasticsearch, là nơi lưu trữ dữ liệu, tham gia thực hiện đánh index của Cluster cũng như thực hiện các thao tác tìm kiếm Mỗi Node được xác định bằng một tên riêng và không được phép trùng lặp
Chức năng chính của Cluster là quyết định xem Shard nào được phân bổ cho Node nào và khi nào thì di chuyển các Cluster để cần bằng lại Cluster
2.7.6 Cài đặt trên hệ điều hành Ubuntu
- Cập nhật package index
Trang 35- Cài đặt JDK
- Để cho phép truy cập vào repositories của bạn thông qua HTTPS, bạn cần cài
đặt gói truyền tải APT
- Pull Elasticsearch repository về
- Add repository vào hệ thống
- Cài đặt Elasticsearch
- Start Elasticsearch
- Configure Elasticsearch
• Chúng ta sử dụng vim để sửa file elasticsearch.yml
• Sửa file giống hình
Trang 36• Restart lại Elasticsearch
2.7.7 Sử dụng Elasticsearch trên Flask
- Cài đặt module elasticsearch
- Thêm, sửa dữ liệu
Trang 37- Tìm kiếm bằng keyword trên tất cả trường đơn giản
Trang 38Hình 3-1 Quy trình của TutorOnline
Trang 393.1.2 Phân tích yêu cầu hệ thống
3.1.2.1 Phần gia sư
- Đăng nhập: Đăng nhập vào trang web để sử dụng thêm các chức năng
- Đăng ký tài khoản: Tạo tài khoản cho người dùng mới
- Quên mật khâu: Giúp người dùng lấy lại mật khẩu cũ
- Thay đổi mật khẩu: Giúp người dùng thay đổi mật khẩu
- Thay đổi thông tin người dùng: Người dùng thay đổi lại thông tin của mình
- Xem chi tiết Profile: Giúp người dùng có thể xem thông tin chi tiết cá nhân
- Đăng ký làm gia sư: Người dùng có thể đăng ký làm gia sư để dạy
- Đăng tin: Đăng bài viết tìm kiếm học viên
- Sửa thông tin bài viết: Cập nhật thông tin bài viết trước đó
- Hiển thị danh sách bài viết đã đăng: Hiển thị danh sách các bài viết mà gia
sư đã đăng lên trang web
- Tìm kiếm bài viết tìm học viên: Tìm kiếm bài viết tìm học viên theo chọn
lọc mong muốn
- Hiển thị vị trí bài viết tìm học viên trên bản đồ: hiển thị danh sách các bài
viết xung quanh người dùng trên bản đồ
- Xem chi tiết thông tin bài viết: Xem chi tiết từng trường thông tin của bài
viết đã đăng
- Xem chi tiết thông tin gia sư: Xem profile của gia sư, đánh giá của học viên
- Đăng ký dạy lớp trong bài viết tìm gia sư: Gửi yêu cầu xin được dạy đến người đăng bài viết tìm gia sư
- Hiển thị danh sách yêu cầu: Hiển thị những yêu cầu mà mình đã đăng ký trong các bài viết
Trang 40- Hiển thị danh sách yêu cầu chờ duyệt: Hiển thị danh sách những yêu cầu của người khác đăng ký bài viết mình đăng, và cả lời mời làm gia sư
- Hủy đăng ký lớp: Hủy những yêu cầu mà mình đã đăng ký ở bài viết
- Từ chối đăng ký lớp: Từ chối những yêu cầu của người khác gửi cho mình
- Chấp nhận đăng ký lớp: Chấp nhận yêu cầu của người khác gửi cho mình
- Danh sách lớp đã dạy: Hiển thị danh sách các lớp mà mình đã tham gia dạy học
- Đánh giá học viên: gia sư đánh giá học viên của mình
- Sửa đánh giá: sửa lại đánh giá cũ
- Xóa đánh giá: xóa đánh giá cũ
- Xem đánh giá của học viên: xem danh sách các đánh giá của học viên
- Theo dõi bài viết: theo dõi bài viết để có thể xem lại sau
- Xem danh sách bài viết đang theo dõi: xem danh sách các bài viết mà mình
đã theo dõi trước đó
3.1.2.2 Phần học viên
- Đăng nhập: Đăng nhập vào trang web để sử dụng thêm các chức năng
- Đăng ký tài khoản: Tạo tài khoản cho người dùng mới
- Quên mật khâu: Giúp người dùng lấy lại mật khẩu cũ
- Thay đổi mật khẩu: Giúp người dùng thay đổi mật khẩu
- Thay đổi thông tin người dùng: Người dùng thay đổi lại thông tin của mình
- Xem chi tiết Profile: Giúp người dùng có thể xem thông tin chi tiết cá nhân
- Đăng ký làm gia sư: Người dùng có thể đăng ký làm gia sư để dạy
- Đăng tin: đăng bài viết tìm kiếm gia sư