Mục tiêu và nhiệm vụ của đề tài
Mục tiêu của đề tài này là phát triển một trang web quản lý siêu thị mini, sử dụng ngôn ngữ lập trình Python và framework Django để xây dựng các API cho các chức năng của trang web.
- Nắm được kiến thức về Python, Django, HTTP, API
- Biết cách phân tích đề tài, thiết kế mô hình, cơ sở dữ liệu của đề tài
- Có thể lập kế hoạch, ước lượng thời gian cho từng nhiệm vụ cụ thể
- Áp dụng các kiến thức đã học để xây dựng các API
- Viết được tài liệu hướng dẫn sử dụng API (API documentation)
- Kiểm tra hoạt động của các API bằng Postman.
Phương pháp nghiên cứu
Phương pháp chính để nghiên cứu đề tài này bao gồm việc đọc tài liệu từ ebook và các bài viết trên các trang web liên quan đến Python, Django Bên cạnh đó, việc tham khảo từ các diễn đàn chuyên về công nghệ và lập trình cũng đóng vai trò quan trọng trong quá trình nghiên cứu.
Kết cấu của đề tài
Đề tài được tổ chức gồm phần mở đầu, 4 chương nội dung và phần kết luận
- Chương 1: Giới thiệu về Công ty TNHH Tin Học và Thương Mại (AsNet) và vị trí Back-End
- Chương 2: Cơ sở lý thuyết
- Chương 3: Triển khai dự án
- Chương 4: Phát triển dự án
- Kết luận và hướng phát triển.
Kết quả dự kiến
- Nắm vững được các kiến thức về ngôn ngữ lập trình Python
- Biết cách sử dụng framework Django vào lập trình Back-End
- Biết các xây dựng các API cho các chức năng của hệ thống
- Xây dựng thành công các API cho hệ thống quản lý siêu thị mini
- Kiểm thử API với Postman
- Biết cách viết tài liệu mô tả API
GIỚI THIỆU VỀ CÔNG TY TNHH TIN HỌC VÀ THƯƠNG MẠI (ASNET) VÀ VỊ TRÍ BACK-END
Tổng quan về vị trí việc làm
1.2 Tổng quan về vị trí việc làm
1.2.1 Nhà phát triển web (Web developer)
Lập trình viên Web, hay còn gọi là Web Developer, là những chuyên gia chịu trách nhiệm phát triển các ứng dụng web có thể hoạt động trên các trình duyệt Quá trình này bao gồm việc viết mã bằng nhiều ngôn ngữ lập trình khác nhau để tạo ra website.
1.2.2 Giới thiệu về Back-End
- Front-End sẽ có vai trò như khuôn mặt còn Back-End đóng vai trò như bộ não
A Back-End developer is responsible for building and maintaining the essential technologies that support the Front-End, which includes the server, application, and database.
- Back-End developer phải luôn đảm bảo máy chủ (server), ứng dụng
Ứng dụng và cơ sở dữ liệu giao tiếp với nhau thông qua các ngôn ngữ server-side như PHP, Ruby, Python và Java Để tìm, lưu trữ hoặc chỉnh sửa dữ liệu, các công cụ như MySQL, Oracle và SQL Server được sử dụng, sau đó dữ liệu sẽ được gửi lại cho người dùng.
- Nhiệm vụ công việc điển hình của một Back-End developer bao gồm:
+ Tạo, tích hợp và quản lý cơ sở dữ liệu (database)
+ Xây dựng phần mềm server-side bằng cách sử dụng Back-End frameworks
+ Triển khai và phát triển hệ quản trị nội dung (CMS), ví dụ: blog, + Làm việc với các công nghệ web server, tích hợp API và hệ điều hành
1.2.3 Kỹ năng cần có của Back-End
Hiểu biết về ngôn ngữ lập trình web là điều cần thiết cho các lập trình viên Back-End, vì họ phải phối hợp với Front-End để đảm bảo sự tương thích giữa máy chủ và giao diện web Để thực hiện tốt vai trò của mình, Back-End cần thành thạo các ngôn ngữ lập trình quan trọng như Python, Java, Ruby và PHP.
Ruby là một ngôn ngữ lập trình linh hoạt, cho phép lập trình viên dễ dàng thay đổi các yếu tố và kết hợp nhiều phương pháp khác nhau Ngôn ngữ này tập trung vào việc tối ưu hóa trải nghiệm người dùng và nâng cao hiệu suất lập trình.
Ruby có khả năng kết hợp các đối tượng thành mô-đun một cách rõ ràng, đảm bảo tính tổ chức và dễ hiểu Ngoài ra, Ruby còn nổi bật với khả năng thích ứng cao và dễ dàng tích hợp các bản cập nhật mới, giúp nâng cao hiệu suất và tính linh hoạt cho các ứng dụng phát triển.
Python là một ngôn ngữ lập trình đa năng và mạnh mẽ, cho phép phát triển Back-End với các tập lệnh dễ dàng và tiết kiệm thời gian Ngôn ngữ này có cú pháp dễ đọc, phù hợp cho người mới bắt đầu và có khả năng xử lý nhanh chóng lượng dữ liệu lớn Python hỗ trợ Framework web mã nguồn mở như Django và có thể chạy trên nhiều nền tảng mà không cần cài đặt Ngoài việc xây dựng ứng dụng web, Python còn rất thích hợp cho phát triển ứng dụng liên quan đến trí tuệ nhân tạo (AI) và học máy (ML).
PHP là ngôn ngữ lập trình kịch bản được sử dụng trong Back-End để phát triển website và ứng dụng Một trong những ưu điểm nổi bật của PHP là tính dễ học và dễ sử dụng, nhờ vào cú pháp đơn giản Những ai đã quen thuộc với ngôn ngữ C sẽ nhanh chóng nắm bắt được PHP.
Java là một ngôn ngữ lập trình hướng đối tượng phổ biến, nổi bật với tính độc lập nền tảng và bảo mật cao Sự mạnh mẽ và tiện lợi của Java, cùng khả năng đa giai đoạn, đã giúp ngôn ngữ này trở thành sự lựa chọn tin cậy của nhiều lập trình viên.
Nhiệm vụ của Back-End là đảm bảo cơ sở dữ liệu được sắp xếp, lưu trữ và có khả năng khôi phục khi cần thiết Mặc dù Front-End có thể kết nối cơ sở dữ liệu với giao diện, nhưng thao tác trên máy chủ là biện pháp tiêu chuẩn để kiểm soát truy cập và quản lý các thay đổi thông tin.
Để hợp tác hiệu quả, các lập trình viên Back-End cần có kiến thức cơ bản về công nghệ Front-End, bao gồm HTML, CSS và JavaScript Sự hiểu biết này sẽ giúp cải thiện khả năng làm việc nhóm và tối ưu hóa quy trình phát triển web.
Quản lý máy chủ là yếu tố quan trọng để một website hoạt động hiệu quả, vì nó yêu cầu một cơ sở dữ liệu để xử lý thông tin về khách hàng và sản phẩm Cơ sở dữ liệu này cần được lưu trữ theo một cấu trúc hợp lý nhằm đảm bảo tính khả dụng và hiệu suất tối ưu cho việc truy xuất và quản lý dữ liệu.
Có nhiều hệ quản trị cơ sở dữ liệu phổ biến như MySQL, Oracle, Postgres SQL và SQL Server, giúp dễ dàng sắp xếp, khôi phục và thay đổi dữ liệu Các cơ sở dữ liệu này thường được triển khai trên máy chủ từ xa Để quản lý máy chủ, Back-End sử dụng các nền tảng như Docker, Kubernetes, Nginx, Node.js và New Relic.
Để trở thành một lập trình viên Back-End, bạn cần nắm vững kiến thức về các framework tương ứng với ngôn ngữ lập trình mà mình yêu thích Mỗi ngôn ngữ thường có nhiều framework, ví dụ như Java có Spring và Hibernate, trong khi Python có Flask và Django Việc hiểu rõ các framework này sẽ giúp bạn phát triển ứng dụng hiệu quả hơn.
Kỹ năng giao tiếp là một trong những yếu tố quan trọng mà một lập trình viên Back-End cần có, bên cạnh các kỹ năng kỹ thuật Việc thành thạo kỹ năng này giúp Back-End dễ dàng hợp tác với các đồng nghiệp khác trong nhóm hoặc với Front-End Hơn nữa, khả năng giao tiếp tốt cũng rất cần thiết khi làm việc với ban lãnh đạo, các chuyên gia, và những người không có nền tảng lập trình, tạo điều kiện thuận lợi cho sự phát triển công việc.
CƠ SỞ LÝ THUYẾT
Ngôn ngữ Python
Hình 2 Ngôn ngữ Python
Ngôn ngữ lập trình Python, do Guido van Rossum phát triển, được giới thiệu lần đầu vào năm 1991 Khi làm việc tại Trung tâm Nghiên cứu Toán và Khoa học Thông tin (CWI) ở Hà Lan, Guido van Rossum đã tạo ra Python với mục tiêu đơn giản hóa lập trình và tăng cường khả năng đọc hiểu mã nguồn.
Python được phát triển bởi ông Guido van Rossum như một dự án cá nhân nhằm thay thế ngôn ngữ lập trình ABC, được tạo ra tại CWI Ngôn ngữ này được thiết kế với mục tiêu đơn giản, dễ đọc và dễ hiểu, giúp đơn giản hóa quá trình viết mã và trở thành công cụ thân thiện cho cả những người mới bắt đầu học lập trình.
Kể từ khi ra mắt, Python đã nhanh chóng trở thành một trong những ngôn ngữ lập trình phổ biến nhất toàn cầu Được phát triển dưới giấy phép mã nguồn mở, Python có một cộng đồng phát triển đông đảo, đóng góp vào việc cải tiến ngôn ngữ này Cộng đồng đã tạo ra nhiều thư viện và framework mạnh mẽ, hỗ trợ đa dạng ứng dụng từ phát triển web đến khoa học dữ liệu và trí tuệ nhân tạo.
- Những lợi ích của Python bao gồm:
+ Các nhà phát triển có thể dễ dàng đọc và hiểu một chương trình Python vì ngôn ngữ này có cú pháp cơ bản giống tiếng Anh
Python nâng cao năng suất làm việc của các nhà phát triển nhờ vào khả năng cho phép họ viết chương trình với ít dòng mã hơn so với các ngôn ngữ lập trình khác.
Python sở hữu một thư viện tiêu chuẩn phong phú, cung cấp nhiều mã có thể tái sử dụng cho hầu hết các tác vụ Điều này giúp các nhà phát triển tiết kiệm thời gian và công sức, không cần phải viết mã từ đầu cho mỗi dự án.
+ Các nhà phát triển có thể dễ dàng sử dụng Python với các ngôn ngữ lập trình phổ biến khác như Java, C và C++
Cộng đồng Python là một mạng lưới rộng lớn với hàng triệu nhà phát triển nhiệt tình trên toàn cầu, sẵn sàng hỗ trợ bạn Khi gặp vấn đề, bạn có thể nhanh chóng nhận được sự giúp đỡ từ cộng đồng này.
Trên Internet, có vô vàn tài nguyên hữu ích cho việc học Python, bao gồm video, chỉ dẫn, tài liệu và hướng dẫn dành cho nhà phát triển.
+ Python có thể được sử dụng trên nhiều hệ điều hành máy tính khác nhau, chẳng hạn như Windows, macOS, Linux và Unix
2.1.2 Python được sử dụng như thế nào
- Phát triển web phía máy chủ
Phát triển web phía máy chủ liên quan đến các hàm Back-End phức tạp giúp các trang web hiển thị thông tin cho người dùng Điều này bao gồm việc tương tác với cơ sở dữ liệu, giao tiếp với các trang web khác và bảo vệ dữ liệu khi truyền qua mạng.
Python là một ngôn ngữ lập trình hữu ích cho việc phát triển mã phía máy chủ nhờ vào việc cung cấp nhiều thư viện phong phú, bao gồm các mã viết sẵn cho các hàm Back-End phức tạp Bên cạnh đó, các nhà phát triển còn tận dụng nhiều khung Python (Python framework) để có được tất cả các công cụ cần thiết cho việc xây dựng ứng dụng hiệu quả.
Tự động hóa các tác vụ hàng ngày một cách nhanh chóng và dễ dàng hơn với ngôn ngữ lập trình Python Các lập trình viên thường sử dụng các tập lệnh Python để tự động hóa nhiều công việc mà trước đây thường phải thực hiện bằng tay.
- Đổi tên một số lượng lớn tệp cùng lúc
- Chuyển đổi một tệp sang một loại tệp khác
- Loại bỏ các từ trùng lặp trong tệp văn bản
- Thực hiện các phép tính toán cơ bản
- Thực hiện phân tích nhật ký cơ bản
- Tìm kiếm lỗi trong nhiều tệp
Khoa học dữ liệu và máy học đóng vai trò quan trọng trong việc trích xuất thông tin quý giá từ dữ liệu Máy học (ML) giúp máy tính tự động học hỏi từ dữ liệu, từ đó đưa ra các dự đoán chính xác Các nhà khoa học dữ liệu thường sử dụng Python để thực hiện các tác vụ liên quan đến khoa học dữ liệu.
Sửa chữa và loại bỏ dữ liệu không chính xác, hay còn gọi là làm sạch dữ liệu, là bước quan trọng trong quá trình xử lý thông tin Đồng thời, việc trích xuất và chọn lọc các đặc điểm đa dạng của dữ liệu giúp nâng cao chất lượng và tính chính xác của các phân tích sau này.
+ Ghi nhãn dữ liệu, gán tên có ý nghĩa cho dữ liệu
+ Tìm các số liệu thống kê khác nhau từ dữ liệu
Trực quan hóa dữ liệu là quá trình sử dụng các biểu đồ và đồ thị như biểu đồ đường, biểu đồ cột, biểu đồ tần suất và biểu đồ tròn để trình bày thông tin một cách rõ ràng và dễ hiểu.
Các nhà khoa học dữ liệu sử dụng thư viện Machine Learning (ML) của Python để đào tạo mô hình và xây dựng công cụ phân loại, giúp phân loại dữ liệu một cách chính xác Các chuyên gia từ nhiều lĩnh vực áp dụng các công cụ này cho các tác vụ như phân loại hình ảnh, văn bản, lưu lượng truy cập mạng, nhận diện giọng nói và khuôn mặt Ngoài ra, Python cũng được sử dụng trong Deep Learning, một kỹ thuật ML nâng cao.
Phát triển phần mềm là một lĩnh vực quan trọng, trong đó các nhà phát triển thường lựa chọn Python để thực hiện nhiều tác vụ khác nhau Một trong những ứng dụng phổ biến của Python là theo dõi lỗi trong mã phần mềm, giúp đảm bảo chất lượng và hiệu suất của sản phẩm.
+ Tự động xây dựng phần mềm
+ Đảm nhận quản lý dự án phần mềm
+ Phát triển nguyên mẫu phần mềm
+ Phát triển các ứng dụng máy tính bằng cách sử dụng những thư viện Giao diện đồ họa người dùng (GUI)
+ Phát triển từ các trò chơi văn bản đơn giản cho đến những trò chơi điện tử phức tạp
Django
Django là một framework ứng dụng web mạnh mẽ, cho phép phát triển các ứng dụng web nhanh chóng và hiệu quả Nó cung cấp các chức năng phổ biến như xác thực, truy xuất thông tin từ cơ sở dữ liệu và quản lý cookie, giúp các nhà phát triển tiết kiệm thời gian bằng cách tái sử dụng các mô-đun đã được nhóm lại Nhờ vào Django, việc viết mã cho các chức năng tương tự trong từng ứng dụng trở nên dễ dàng hơn, nâng cao hiệu suất làm việc của các lập trình viên.
13 để sắp xếp và viết mã của họ hiệu quả hơn và giảm đáng kể thời gian phát triển web
Mỗi ứng dụng web bao gồm hai phần chính: mã máy chủ và mã máy khách Khi người dùng nhập URL vào trình duyệt, họ gửi yêu cầu tới máy chủ web nơi ứng dụng đang hoạt động Máy chủ sẽ xử lý yêu cầu này bằng cách truy cập cơ sở dữ liệu và gửi thông tin trở lại máy khách dưới dạng phản hồi Cuối cùng, mã máy khách sẽ hiển thị thông tin đó cho người dùng dưới dạng trang web.
- Django quản lý mã cho hệ thống yêu cầu và phản hồi này bằng cách sử dụng kiến trúc Models-View-Template (MVT)
Các mô hình Django là giao diện giữa cơ sở dữ liệu và mã máy chủ, cung cấp thông tin chính xác về dữ liệu Chúng bao gồm các trường và thao tác cần thiết để tương tác với cơ sở dữ liệu Nhờ đó, mô hình Django chuyển đổi bảng cơ sở dữ liệu thành lớp hoặc đối tượng trong mã Python, quá trình này được gọi là ánh xạ quan hệ đối tượng.
Khung nhìn của Django sử dụng các mô hình để xử lý yêu cầu từ người dùng Bạn có thể viết hàm khung nhìn cho từng loại yêu cầu mà người truy cập có thể thực hiện trên trang web của bạn Hàm khung nhìn nhận yêu cầu như dữ liệu đầu vào và trả về phản hồi, có thể là mã lỗi, hình ảnh, tệp hoặc bất kỳ loại dữ liệu nào khác.
Django cung cấp tính năng trình ánh xạ URL, cho phép bạn kết nối hàm khung nhìn với các URL cụ thể Để thực hiện điều này, bạn cần tạo một tệp trình ánh xạ URL, nơi bạn sẽ định nghĩa các mẫu URL Ví dụ, bạn có thể sử dụng cú pháp như sau: `urlpatterns = [ path('employee/name', views.employee_name), path('employee//', views.year_archive), ]`.
- Template: Các mẫu Django quản lý cách trình bày trang web trong trình duyệt
Hầu hết các trang web hiện nay đều sử dụng Ngôn ngữ đánh dấu siêu văn bản (HTML), vì vậy bạn có thể viết mã mẫu Django một cách tương tự như HTML để dễ dàng phát triển và thiết kế giao diện.
2.2.3 Khả năng điều chỉnh quy mô của Django
Trong phát triển trang web, khả năng điều chỉnh quy mô là yếu tố quan trọng, cho phép trang web xử lý nhiều yêu cầu từ máy khách cùng một lúc Các dự án Django có tính linh hoạt cao, có khả năng xử lý hàng nghìn yêu cầu đồng thời Bạn có thể điều chỉnh quy mô ứng dụng Django của mình thông qua nhiều phương pháp khác nhau.
Django được thiết kế để tối ưu hóa hiệu suất phần cứng trong hệ thống của bạn với kiến trúc không chia sẻ, tách biệt các thành phần như lớp cơ sở dữ liệu và lớp ứng dụng Điều này cho phép bạn mở rộng hệ thống bằng cách thêm phần cứng mà không ảnh hưởng đến các thành phần khác Ngoài ra, Django hỗ trợ lưu bộ nhớ đệm, giúp tăng tốc độ xử lý yêu cầu bằng cách lưu trữ dữ liệu trên máy chủ phía khách hoặc máy chủ trung gian, từ đó cải thiện khả năng mở rộng của ứng dụng Hệ thống lưu bộ nhớ đệm của Django cung cấp nhiều cấp độ khác nhau để tối ưu hóa hiệu suất.
1 Bạn có thể lưu toàn bộ trang web của mình vào bộ nhớ đệm
2 Bạn có thể lưu đầu ra của hàm khung nhìn cụ thể vào bộ nhớ đệm
3 Bạn có thể lưu nội dung cụ thể mà tốn nhiều thời gian tạo vào bộ nhớ đệm
Các dự án Django có khả năng tích hợp một cách hiệu quả với các bộ nhớ đệm bên thứ ba Bạn có thể lập trình để cung cấp thông tin về các bộ nhớ đệm này, đồng thời chỉ định cho bộ nhớ đệm biết phần ứng dụng nào bạn muốn lưu trữ.
API
API, hay Giao diện lập trình ứng dụng, là phần mềm trung gian giúp kết nối và tương tác với các thư viện và ứng dụng khác.
Khi sử dụng ứng dụng di động, dữ liệu được gửi qua Internet đến máy chủ Máy chủ sẽ xử lý và diễn giải dữ liệu, thực hiện các hành động cần thiết, sau đó gửi thông tin trở lại điện thoại Cuối cùng, ứng dụng sẽ trình bày thông tin một cách dễ đọc cho người dùng.
2.3.2 Cách hoạt động của API
Đầu tiên, cần xây dựng URL API để cho phép bên thứ ba gửi yêu cầu dữ liệu đến máy chủ cung cấp nội dung và dịch vụ qua giao thức HTTP hoặc HTTPS.
Tại các web server cung cấp nội dung, các ứng dụng nguồn sẽ thực hiện kiểm tra xác thực và tìm kiếm tài nguyên phù hợp để tạo ra nội dung trả về kết quả.
- Server trả về kết quả theo định dạng JSON hoặc XML thông qua giao thức HTTP/HTTPS
Tại nơi yêu cầu ban đầu, dữ liệu JSON/XML sẽ được phân tích để trích xuất thông tin Sau khi thu thập dữ liệu, các hoạt động tiếp theo bao gồm lưu trữ dữ liệu vào cơ sở dữ liệu và hiển thị thông tin.
2.3.3 Tài liệu mô tả API (API Documentation)
Tài liệu API cung cấp hướng dẫn chi tiết về cách sử dụng và tích hợp hiệu quả các API của hệ thống, phục vụ như một tài liệu tham khảo cho người dùng Đặc biệt, tài liệu này rất quan trọng đối với lập trình viên, giúp họ dễ dàng đọc, hiểu và áp dụng API Do đó, việc tạo ra một tài liệu API được thiết kế tốt, toàn diện và dễ theo dõi là điều cần thiết để đảm bảo hiệu quả trong quá trình phát triển.
Một API sẽ cung cấp thông tin chi tiết về đường dẫn, các tham số cần thiết, kiểu dữ liệu trả về, phương thức sử dụng và kèm theo ví dụ minh họa.
Một tài liệu mô tả API chất lượng cần bao gồm ví dụ cho từng mục, đồng thời cung cấp đầy đủ ví dụ về dữ liệu trả về trong mọi trường hợp.
Tài liệu mô tả API truyền thống thường được soạn thảo bằng các công cụ viết và cần được cập nhật thường xuyên để phản ánh những thay đổi Hiện nay, có một số công cụ tự động hóa quy trình tạo tài liệu API, chẳng hạn như Swagger, giúp tiết kiệm thời gian và nâng cao độ chính xác.
Postman
Hình 4 Giao diện chính Postman
Postman là công cụ phổ biến cho phép người dùng thao tác với API, đặc biệt là REST, mà không cần viết mã Với khả năng hỗ trợ tất cả các phương thức HTTP như POST, PUT, DELETE, PATCH và GET, Postman trở thành lựa chọn hàng đầu cho việc thử nghiệm API Ngoài ra, công cụ này còn cho phép lập trình viên lưu lại lịch sử các request, mang lại sự tiện lợi cho việc sử dụng lại sau này.
- Hiện nay, Postman được sử dụng vô cùng rộng rãi nhờ mang lại nhiều lợi ích như:
Postman cho phép người dùng tạo bộ sưu tập cho các lệnh gọi API, giúp tổ chức các thử nghiệm một cách hiệu quả Mỗi bộ sưu tập có thể chứa nhiều thư mục con với các request khác nhau, tạo điều kiện thuận lợi cho việc quản lý và truy cập các lệnh gọi API.
Trong Postman, người dùng có thể dễ dàng chia sẻ các tệp thông qua việc import hoặc export Collections và environment Bên cạnh đó, việc sử dụng các liên kết trực tiếp cũng hỗ trợ mục đích chia sẻ bộ sưu tập một cách hiệu quả Đặc biệt, Postman còn cho phép kiểm tra trạng thái phản hồi của HTTP, giúp người dùng theo dõi và phân tích các yêu cầu gửi đi.
Bảng điều khiển của Postman hỗ trợ gỡ lỗi hiệu quả bằng cách kiểm tra dữ liệu đã xuất, giúp quá trình gỡ lỗi trở nên dễ dàng và linh hoạt hơn.
Hỗ trợ tạo thử nghiệm giúp xác định các điểm kiểm tra và trạng thái phản hồi HTTP thành công Vai trò xác nhận có thể được thêm vào từng lệnh gọi API để đảm bảo phạm vi kiểm tra được thực hiện đầy đủ.
Bằng cách sử dụng bộ sưu tập và Newman, quá trình kiểm thử sẽ được đảm bảo thực hiện thành công trong các lần lặp lại, giúp tiết kiệm thời gian cho các thử nghiệm có thể được lặp lại một cách hiệu quả.
+ Tích hợp liên tục: Postman có khả năng hỗ trợ tích hợp liên tục cho các hoạt động phát triển và có thể được duy trì
2.4.2 Các chức năng của Postman
- New – tạo request, collection hoặc environment mới
- Import – import collection hoặc environment Có các tùy chọn để nhập từ tệp, thư mục, liên kết hoặc dán từ văn bản thuần
- Runner – Kiểm tra tự động hóa có thể được thực hiện thông qua Runner cả collection
- Open New – Mở một tab mới, cửa sổ Postman hoặc cửa sổ Runner
- My Workspace – Tạo khu vực làm việc riêng hoặc cho một nhóm
- Invite – Cộng tác với nhiều thành viên bằng việc mời các thành viên
Lịch sử – Các yêu cầu mà bạn đã thực hiện sẽ được hiển thị trong phần Lịch sử, giúp bạn theo dõi và xem lại các hành động đã thực hiện.
Tổ chức bộ thử nghiệm của bạn hiệu quả hơn bằng cách tạo các collection Mỗi collection có khả năng chứa nhiều thư mục con và yêu cầu khác nhau Đặc biệt, các request hoặc thư mục có thể được trùng lặp, giúp tăng tính linh hoạt trong quản lý.
Tab Request hiển thị tiêu đề của yêu cầu mà bạn đang xử lý Nếu yêu cầu không có tiêu đề, hệ thống sẽ tự động hiển thị "Untitled Request" làm mặc định.
HTTP Request là một phần quan trọng trong giao tiếp giữa client và server Khi bạn click vào đây, một danh sách thả xuống sẽ hiện ra với các loại request khác nhau như GET, POST, COPY, DELETE, và nhiều hơn nữa Trong thực tế, hai loại yêu cầu phổ biến nhất được sử dụng là GET và POST.
- Request URL – Còn được gọi là điểm cuối (endpoint), đây là nơi bạn sẽ xác định liên kết đến nơi API sẽ giao tiếp
- Save – Nếu có thay đổi đối với request, nhấp vào Save là bắt buộc để những thay đổi mới sẽ không bị mất hoặc bị ghi đè
- Params – Đây là nơi bạn sẽ viết các tham số cần thiết cho một request, ví dụ như các cặp key – value
- Authorization – Để truy cập API, cần được cấp quyền Nó có thể ở dạng tên người dùng và mật khẩu, bearer token, v.v
- Headers – Bạn có thể thiết lập các header như nội dung kiểu JSON tùy theo cách tổ chức của bạn
- Body – Đây là nơi chúng ta có thể tùy chỉnh chi tiết trong request thường được sử dụng trong request POST
Pre-request Script là các tập lệnh được thực thi trước khi gửi yêu cầu Thông thường, các script này được sử dụng để thiết lập môi trường, đảm bảo rằng các kiểm tra sẽ được thực hiện trong điều kiện chính xác.
Các bài kiểm tra là các kịch bản được thực hiện trong quá trình xử lý yêu cầu Việc thiết lập các điểm kiểm tra là rất quan trọng để đảm bảo trạng thái hoạt động bình thường, xác minh rằng dữ liệu nhận được đúng như mong đợi và thực hiện các thử nghiệm khác nhằm nâng cao chất lượng.
TRIỂN KHAI DỰ ÁN
Xác định yêu cầu của dự án
Dưới đây là mô tả về các chức năng và yêu cầu của dự án quản lý siêu thị mini:
Quản lý tài khoản người dùng bao gồm việc tạo và điều chỉnh thông tin cá nhân, hỗ trợ đăng nhập và đăng xuất Hệ thống phân quyền cho phép người dùng có các chức năng khác nhau dựa trên vai trò và quyền hạn của họ.
Quản lý vai trò và quyền hạn trong hệ thống là rất quan trọng để kiểm soát quyền truy cập Các vai trò như Nhân viên và Quản lý cần được xác định rõ ràng, và quyền hạn phải được gán cho từng vai trò để đảm bảo chỉ những người có thẩm quyền mới có thể truy cập vào các chức năng cụ thể Hệ thống cũng cần cho phép quản lý việc thêm, sửa đổi và xóa vai trò cũng như quyền hạn để duy trì tính linh hoạt và an toàn.
Quản lý hóa đơn là quy trình tạo và theo dõi hóa đơn bán hàng, trong đó lập hóa đơn dựa trên thông tin khách hàng và sản phẩm đã mua Hệ thống này giúp tính toán tổng giá trị hóa đơn và lưu trữ thông tin chi tiết về từng sản phẩm, từ đó nâng cao hiệu quả quản lý tài chính và phục vụ khách hàng tốt hơn.
Quản lý sản phẩm và danh mục sản phẩm bao gồm các chức năng như thêm, sửa, và xóa sản phẩm cũng như danh mục tương ứng Hệ thống lưu trữ thông tin chi tiết về tên sản phẩm, mô tả, giá bán, số lượng tồn kho, và các thông tin liên quan khác, giúp người dùng dễ dàng theo dõi và quản lý hiệu quả.
Quản lý xuất hàng và đặt hàng là quy trình quan trọng trong việc tạo đơn đặt hàng (Purchase Order) để mua sắm hàng hóa Quá trình này bao gồm việc ghi nhận thông tin liên quan đến đơn hàng cũng như số lượng hàng hóa nhập kho Đồng thời, việc quản lý xuất hàng đến các điểm bán cũng cần được thực hiện một cách hiệu quả để đảm bảo cung ứng kịp thời.
- Quản lý Lô hàng (Lot): Ghi nhận thông tin về lô hàng của sản phẩm nhằm quản lý ngày nhập, ngày sản xuất, ngày hết hạn của sản phẩm
Quản lý phiếu nhập kho là quá trình tạo và theo dõi phiếu nhập hàng vào kho, bao gồm việc ghi nhận thông tin quan trọng như nhà cung cấp, ngày nhập, số lượng hàng hóa và giá tiền.
- Thống kê: Xuất báo cáo và thống kê hàng hóa, doanh thu theo ngày, tuần, tháng, quý, năm,…
Thiết kế mô hình erd và cơ sở dữ liệu
3.2.1 Công cụ thiết kế mô hình erd và cơ sở dữ liệu
Hình 5 Công cụ thiết kế Diagram Draw.io
- Draw.io là một ứng dụng web miễn phí và mã nguồn mở cho việc tạo và vẽ các sơ đồ, biểu đồ, và diagram đa dạng
Ứng dụng này cho phép người dùng tạo ra nhiều loại sơ đồ đa dạng, bao gồm sơ đồ luồng công việc, sơ đồ UML, sơ đồ cơ sở dữ liệu, sơ đồ mạng, biểu đồ tư duy, và nhiều loại biểu đồ khác.
Draw.io cung cấp giao diện thân thiện với người dùng, đi kèm với nhiều công cụ vẽ và một bộ sưu tập đa dạng các hình dạng cùng biểu tượng, giúp bạn dễ dàng tạo ra những biểu đồ và sơ đồ phức tạp.
- Draw.io cho phép bạn làm việc trực tiếp trên trình duyệt mà không cần cài đặt phần mềm nào
Bạn có thể lưu trữ sơ đồ của mình trên các dịch vụ điện toán đám mây như Google Drive, OneDrive, Dropbox và Github Ngoài ra, draw.io cho phép xuất biểu đồ dưới dạng hình ảnh hoặc file PDF để dễ dàng chia sẻ với người khác.
3.2.2 Mục tiêu của mô hình erd
ERD (Entity-Relationship Diagram) là biểu đồ mô tả cấu trúc cơ sở dữ liệu một cách trực quan, giúp hiển thị các mối quan hệ giữa các thực thể trong hệ thống Việc sử dụng ERD rất hữu ích để hiểu cách các thực thể tương tác và cách thức tổ chức, lưu trữ dữ liệu trong cơ sở dữ liệu.
3.2.3 Mô hình erd của dự án
Hình 6 Mô hình erd
Mô hình erd bao gồm các thực thể:
Tài khoản là một thực thể quan trọng để quản lý thông tin của nhân viên siêu thị, bao gồm tên, chức vụ, ngày sinh và số điện thoại.
- Role: là thực thể để quản lý vai trò, các vai trò có thể có như nhân viên, quản lý
- Permission: là thực thể để quản lý các quyền trong hệ thống như thêm, sửa, xóa,…
- Invoice: là thực thể để quản lý hóa đơn bán hàng, được tạo và in khi khách hàng tính tiền và thanh toán
Sản phẩm là thực thể dùng để quản lý các mặt hàng đang được bày bán tại siêu thị, bao gồm những thuộc tính quan trọng như tên sản phẩm, giá bán, mã sản phẩm và nhà cung cấp.
- Receipt: là thực thể để quản lý phiếu nhập kho, giúp việc quản lý lượng hàng nhập kho trở nên dễ dàng
- Goods delivery note: là thực thể quản lý phiếu xuất hàng nhằm quản lý lượng hàng xuất ra khỏi kho
- Purchase order: là thực thể quản lý phiếu đặt hàng, sử dụng khi cửa hàng sắp hết hàng để đặt thêm hàng từ nhà cung cấp
- Supplier: là thực thể để quản lý nhà cung cấp, gồm các thuộc tính như mã nhà cung cấp, tên nhà cung cấp,…
3.2.4 Mục tiêu của thiết kế cơ sở dữ liệu
Tối ưu hóa quản lý dữ liệu là mục tiêu chính trong thiết kế cơ sở dữ liệu, nhằm cải thiện quy trình lưu trữ và quản lý thông tin của hệ thống Việc xây dựng một cơ sở dữ liệu có cấu trúc hợp lý giúp đảm bảo hiệu suất cao trong việc truy vấn và cập nhật dữ liệu.
Để đảm bảo tính tích hợp, cơ sở dữ liệu cần được thiết kế để các thành phần trong hệ thống có thể tương tác hiệu quả Tính tích hợp này hỗ trợ việc chia sẻ thông tin và dữ liệu giữa các chức năng và module khác nhau trong dự án.
Để đảm bảo bảo mật dữ liệu trong thiết kế cơ sở dữ liệu, cần áp dụng các biện pháp bảo vệ như mã hóa, phân quyền truy cập và theo dõi hoạt động Những biện pháp này giúp bảo vệ thông tin quan trọng khỏi các mối đe dọa và đảm bảo an toàn cho dữ liệu.
Thiết kế cơ sở dữ liệu cần đảm bảo khả năng mở rộng, cho phép dễ dàng thêm mới các tính năng, dữ liệu hoặc module mà không làm ảnh hưởng đến cấu trúc hiện tại.
Thiết kế cơ sở dữ liệu cần giảm thiểu sự trùng lặp dữ liệu để đảm bảo tính chính xác và nhất quán của thông tin Sự trùng lặp có thể dẫn đến sai sót và khó khăn trong việc duy trì dữ liệu Mục tiêu của thiết kế cơ sở dữ liệu là tối ưu hóa quản lý dữ liệu, đảm bảo tính tích hợp, bảo mật và khả năng mở rộng, đồng thời giảm thiểu sự trùng lặp và nâng cao tính chính xác của thông tin.
3.2.5 Mô hình cơ sở dữ liệu của dự án
Hình 7 Mô hình cơ sở dữ liệu
Trong mô hình này, các bảng màu vàng đại diện cho dữ liệu ổn định, được sử dụng làm tham chiếu cho các bảng màu xanh Các bảng màu xanh chứa dữ liệu thường xuyên được cập nhật và thay đổi, lấy thông tin từ các bảng màu vàng Bảng màu xanh lá đóng vai trò là bảng trung gian, giúp chuẩn hóa mối quan hệ nhiều-nhiều giữa hai bảng khác.
Thư viện quản lý
3.3.1 Vai trò của thư viện quản lý trong dự án
Trong một dự án, việc có nhiều thành viên tham gia và nhiều file mã khác nhau là điều phổ biến Để ngăn chặn xung đột và mất mát mã, việc quản lý mã nguồn một cách hiệu quả là rất cần thiết Trong dự án này, Git và GitHub được sử dụng như công cụ chính để quản lý thư viện mã.
Git giúp thực hiện các công việc trong dự án như sau:
- Là công cụ giúp quản lý mã nguồn được tổ chức theo dạng dữ liệu phân tán (distributed)
- Giúp theo dõi và đồng bộ mã nguồn trong quá trình làm việc lên 1 server (remote)
- Hỗ trợ các thao tác kiểm tra mã nguồn của dev trong quá trình làm việc (Diff, Check modifications, ShowLog, …)
- Hỗ trợ các các thao tác kiểm tra, nhận xét, chỉnh sửa,… giữa người viết mã và người người quản lý mã
3.3.2 Tạo kho lưu trữ (Repository)
Link kho lưu trữ (Repository): https://github.com/hothanhtuan1209/mini_supermarket_project.git
Trong quy trình phát triển dự án, việc tạo nhánh (Branch) là rất quan trọng, với hai nhánh chính là main và develop Nhánh main đóng vai trò là nhánh chính của dự án, trong khi nhánh develop được sử dụng để tạo ra các nhánh phụ cho từng tính năng, giúp quản lý và phát triển dự án hiệu quả hơn.
Cài đặt các công cụ hỗ trợ
Dự án được xây dựng dựa trên ngôn ngữ Python
- Ngôn ngữ lập trình: Python
- Công cụ lập trình: Visual Studio Code
- Công cụ hỗ trợ test API Postman
PHÁT TRIỂN DỰ ÁN
Lập trình cho dự án
1 Triển khai tính năng thêm vai trò và viết tài liệu API 2.5h
2 Triển khai tính năng sửa vai trò và viết tài liệu API 2.5h
3 Triển khai tính năng xóa vai trò và viết tài liệu API 1.5h
4 Triển khai tính năng thêm quyền và viết tài liệu API 2.5h
5 Triển khai tính năng chỉnh sửa quyền và viết tài liệu API 2.5h
6 Triển khai tính năng xóa quyền và viết tài liệu API 1.5h
7 Triển khai tính năng thêm tài khoản và viết tài liệu API 2.5h
8 Triển khai tính năng xem chi tiết nhân viên và viết tài liệu API 1.5h
9 Triển khai tính năng đăng nhập và viết tài liệu API 2.5h
10 Triển khai tính năng đăng xuất và viết tài liệu API 1.5h
11 Triển khai tính năng chỉnh sửa thông tin nhân viên và viết tài liệu API 1.5h
12 Triển khai tính năng đổi mật khẩu và viết tài liệu API 1.5h
13 Triển khai tính năng xem danh sách tất cả nhân viên và viết tài liệu API 1.5h
Bảng 1 Bảng kế hoạch chi tiết để thực hiện các tính năng đã chọn
4.3 Lập trình cho dự án
4.3.1 Quy trình thực hiện viết API
- Tạo dự án (Project): Bắt đầu bằng việc tạo một dự án mới trong Django Sử dụng lệnh django-admin startproject projectname để khởi tạo dự án
Để phát triển dự án, bạn cần tạo các ứng dụng (apps) bên trong dự án nhằm tổ chức mã nguồn hiệu quả Để tạo ứng dụng mới, hãy sử dụng lệnh python manage.py startapp appname.
Để xây dựng các models, trước tiên cần định nghĩa chúng nhằm biểu diễn dữ liệu cần lưu trữ Sử dụng các trường như CharField, IntegerField và ForeignKey để thiết lập các mối quan hệ và thuộc tính cho các models.
To build views, create view functions that manage the logic of the API Within each view, extract data from the request, perform necessary processing, and return responses containing JSON data or error messages.
Để thiết lập các URLs trong Django, bạn cần định nghĩa các đường dẫn để gọi các hàm view tương ứng Sử dụng module urls của Django giúp xác định mối liên hệ giữa các đường dẫn và các hàm view, từ đó tạo ra một cấu trúc website mạch lạc và dễ dàng quản lý.
Sử dụng Postman để kiểm tra API bằng cách tạo các yêu cầu HTTP như GET, POST, PUT và DELETE với các tham số và dữ liệu phù hợp Sau khi gửi yêu cầu, kiểm tra kết quả trả về để đảm bảo rằng API hoạt động đúng như mong đợi.
Trong một dự án, views đóng vai trò quan trọng trong việc xử lý logic cho từng chức năng Việc tạo ra các hằng số cho các thông điệp cần trả về và sử dụng lại chúng là rất cần thiết để đảm bảo tính nhất quán và dễ bảo trì trong quá trình phát triển.
Hình 11 Thiết lập thông báo
- Chức năng tạo mới vai trò (add_role)
Hình 12 View tạo mới vai trò
+ Chức năng năng tạo mới là phương thức POST
+ Dữ liệu được truyền vào dưới dạng Json
+ Sau khi xử lý trả về thông báo kèm trạng thái cho từng trường hợp
- Chức năng chỉnh sửa vai trò (update_role)
Hình 13 View chỉnh sửa vai trò
+ Chức năng update sử dụng phương thức PUT
+ Dữ liệu update được truyền ở dạng Json
+ Sau khi xử lý trả về thông báo kèm trạng thái cho từng trường hợp
- Chức năng xóa vai trò (delete_role)
Hình 14 View xóa vai trò
+ Chức năng xóa sử dụng phương thức DELETE
+ Sau khi xóa sẽ trả về thông báo cho từng trường hợp
4.3.4 Cấu hình các đường dẫn (URLs)
Sau khi tạo ra views, chúng ta cần tạo các đường dẫn để ứng dụng có thể truy cập đến view
- Cấu hình urls cho chức năng tạo vai trò
Hình 15 Urls tạo vai trò
- Cấu hình urls cho chức năng chỉnh sửa vai trò
Hình 16 Urls chỉnh sửa vai trò
- Cấu hình urls cho chức năng xóa vai trò
Hình 17 Urls xóa vai trò
4.3.5 Kiểm thử hoạt động của API trên Postman a) Kiểm tra hoạt động của chức năng tạo mới vai trò
Hình 18 Tạo vai trò
+ Chúng ta chọn phương thức POST cho việc tạo mới
+ Điền đường dẫn để Postman có thể truy cập để kiểm thử
+ Tại phần body sử dụng dữ liệu dạng Json để truyền vào, ở đây là tạo mới vai trò thủ kho (Stocker)
Hình 19 Tạo vai trò thành công
+ Sau khi tạo mới thành công, Postman trả về thông báo tạo thành công, thông báo này cần phải được cấu hình trước
+ Trạng thái trả về là 200 tức là thành công, không xảy ra lỗi
Hình 20 Lỗi khi tạo vai trò
+ Nếu không điền tên của vai trò cần tạo thì Postman lập tức báo lỗi + Trạng thái trả về là 400 tức là có lỗi xảy ra
Hình 21 Lỗi khi tạo vai trò
+ Nếu nhập tên trùng với tên đã có trước đó thì Postman cũng đã báo lỗi
+ Trạng thái trả về là 400 tức là có lỗi xảy ra b) Kiểm tra hoạt động của chức năng chỉnh sửa vai trò (update_role)
Hình 22 Cập nhật vai trò thành công
Sau khi chọn phương thức PUT, bạn cần nhập đường dẫn kèm theo ID của vai trò mà bạn muốn chỉnh sửa Sau khi điền đầy đủ thông tin cần thay đổi, hãy nhấn nút Send để hoàn tất.
Chúng ta có thể thiết lập ID trong body của JSON để đảm bảo rằng ID không bị lộ, điều này giúp bảo vệ dữ liệu và giữ cho ID không bị nhìn thấy trong các trường hợp cần giấu thông tin.
+ Sau khi chỉnh sửa thành công, Postman trả về thông báo chỉnh sửa thành công, thông báo này cần phải được cấu hình trước
+ Trạng thái trả về là 200 tức là thành công, không xảy ra lỗi
Hình 23 Lỗi khi chỉnh sửa vai trò
+ Nếu không điền tên để update vai trò thì Postman lập tức báo lỗi + Trạng thái trả về là 400 tức là có lỗi xảy ra
Hình 24 Lỗi khi chỉnh sửa vai trò
+ Nếu ID nhập vào đường dẫn không tồn tại, 1 thông báo không tìm thấy sẽ được trả về
+ Trạng thái trả về là 404 tức là có lỗi xảy ra c) Kiểm tra hoạt động của chức năng xóa vai trò
Hình 25 Xóa vai trò thành công
+ Chọn phương thức DELETE cho hành động xóa, điền đường dẫn kèm
ID của vai trò cần xóa
Ngoài việc đính kèm ID vào đường dẫn, bạn có thể thiết lập ID trong phần body của JSON, giúp bảo mật thông tin và ngăn chặn việc lộ dữ liệu.
+ Sau khi xóa thành công thì Postman trả về thông báo và trạng thái là
200 tức là xóa thành công
Hình 26 Lỗi khi xóa vai trò
+ Nếu không tìm thấy ID phù hợp với ID nhập vào, thông báo không tìm thấy sẽ được trả về
+ Trạng thái trả về là 404 tức là có lỗi xảy ra
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
- Nâng cao kỹ năng sử dụng ngôn ngữ lập trình Python
- Biết cách sử dụng Git và Github để quản lý mã một cách hiệu quả và khoa học
-Phát triển thêm tư duy về phân tích và xây dựng hệ thống, cũng như thiết kế cơ sở dữ liệu
- Học được kỹ năng lên kế hoạch một cách chi tiết cho công việc
- Biết sử dụng Django để lập trình Back-End, có thể làm được những chức năng đơn giản
-Hiểu cách các giao thức HTTP như GET, POST, PUT, DELETE,… hoạt động
- Biết cách viết một API hoàn chỉnh và sử dụng cơ bản Json
- Có thể viết tài liệu cho 1 API cơ bản
- Có thể sử dụng được Postman để test chức năng của API
- Vì thời gian thực tập khá ngắn nên không có nhiều thời gian để có thể học hết những kỹ năng cần thiết
-Hệ những chức năng đề ra vẫn chưa thực hiện hết vì thiếu thời gian cũng như kiến thức
-Khả năng đọc tài liệu vẫn còn chậm dẫn đến trễ kế hoạch đề ra
Sau quá trình thực tập tại công ty và học tập tại trường, dưới sự chỉ dạy của thầy cô và người hướng dẫn, tôi đã xác định được định hướng nghề nghiệp rõ ràng Tôi sẽ tiếp tục học tập và rèn luyện, không ngừng trau dồi kiến thức nhằm phát triển thành một lập trình viên Back-End với kỹ năng và kiến thức vững vàng.
Đề tài phát triển phần mềm quản lý siêu thị mini vẫn còn nhiều tính năng cần hoàn thiện do hạn chế về thời gian và kiến thức Với các mô hình ERD và cơ sở dữ liệu đã được thiết kế tỉ mỉ, tôi sẽ tiếp tục học hỏi để hoàn thiện những tính năng còn lại, nhằm tạo ra một phần mềm ứng dụng thực tiễn trong tương lai.