Stack công nghệ và môi trường phát triển
Hệ thống được phát triển bằng ngôn ngữ Python, sử dụng MySQL làm cơ sở dữ liệu backend, và áp dụng framework Django/Flask. Các mục tiêu chính dự kiến đạt được:
- Học hỏi kiến thức và quy trình làm việc liên quan đến phát triển và thiết kế hệ thống;
- Làm quen với công cụ PyCharm để biên soạn code cả frontend và backend;
- Ứng dụng framework Django/Flask để phát triển hệ thống;
- Nắm vững cách tạo và chỉnh sửa cơ sở dữ liệu bằng MySQL.
Dự án sử dụng ngôn ngữ Python để phát triển. Các thao tác ở cấp độ code chủ yếu được thực hiện trong PyCharm. Các bảng và dữ liệu sử dụng trong hệ thống được lưu trữ trong cơ sở dữ liệu MySQL, thuận tiện cho việc thao tác dữ liệu. Dự án dựa trên nền tảng phát triển WEB.
Ngôn ngữ phát triển: Python
Framework: Flask (cũng có phiên bản Django)
Phiên bản Python: python3.7.7
Cơ sở dữ liệu: mysql
Công cụ cơ sở dữ liệu: Navicat
Phần mềm phát triển: PyCharm
Trình duyệt: Google Chrome
Thiết kế hệ thống
Nguyên lý cơ bản: Dựa trên phương pháp luận kỹ thuật phần mềm, tuân thủ theo 8 giai đoạn của vòng đời phần mềm: định nghĩa vấn đề, nghiên cứu tính khả thi, phân tích yêu cầu, thiết kế tổng thể, thiết kế chi tiết, mã hóa và kiểm thử đơn vị, kiểm thử tổng hợp và bảo trì phần mềm.
- Thiết kế cơ sở dữ liệu: Thiết kế cấu trúc cơ sở dữ liệu hiệu quả, bao gồm việc thiết kế các bảng dữ liệu như thông tin người dùng, thông tin xe, thông tin đơn đặt vé, và mối quan hệ giữa các bảng.
- Thiết kế kiến trúc hệ thống: Thiết kế kiến trúc tổng thể của hệ thống, bao gồm thiết kế giao diện frontend, backend, và giao diện API.
- Thiết kế trải nghiệm người dùng: Thiết kế giao diện thân thiện với người dùng, nâng cao trải nghiệm, bao gồm quy trình thiết kế các thao tác như đăng ký người dùng.
- Thiết kế trang frontend: Sử dụng framework Web của Python như Django hoặc Flask để phát triển nhanh các trang frontend thân thiện với người dùng.
Nghiên cứu thu thập và trực quan hóa dữ liệu frontend, làm quen với framework Django, cú pháp thiết kế lập trình Python. Vấn đề cần giải quyết là thiết kế một giao diện frontend đơn giản, dễ thao tác, giải quyết mối quan hệ giữa dữ liệu, điều chỉnh cấu trúc bảng dữ liệu.
Hệ thống áp dụng phương pháp thiết kế hướng đối tượng, một phương pháp thiết kế chương trình dựa trên phân tích cấu trúc lấy dữ liệu làm trung tâm, tư tưởng chính là đóng gói dữ liệu và các thao tác xử lý dữ liệu này vào một cấu trúc dữ liệu gọi là lớp. Phương pháp này mô hình hóa thế giới thực một cách sát hợp và hợp lý, phù hợp hơn với tư duy nhận thức của con người về thế giới.
Giải pháp thực hiện
Sử dụng Navicat hoặc các công cụ khác để tạo cơ sở dữ liệu có tên tương ứng trong MySQL và nhập tệp sql của dự án; sử dụng PyCharm để nhập dự án, sửa đổi cấu hình và chạy dự án; sửa đổi cấu hình cơ sở dữ liệu trong tệp config.ini của dự án thành cấu hình của riêng bạn, sau đó chạy.
- Môi trường chạy: python3.7/python3.8.
- Môi trường IDE: pycharm+mysql5.7/8.0+;
- Công cụ cơ sở dữ liệu: Navicat11
- Môi trường phần cứng: windows11/10 8GB RAM trở lên
- Cơ sở dữ liệu: MySql 5.7/8.0+;
Sau khi chạy thành công, trong trình duyệt nhập: http://localhost:8080/tên_dự án
Hệ thống chọn ngôn ngữ lập trình. Pymysql là một thư viện Python đóng gói driver MySQL, cho phép Python kết nối đến MySQL. Python có quy phạm chính thức về giao diện thống nhất để truy cập cơ sở dữ liệu (Python DB-API), ngăn chặn vấn đề chương trình giao diện bị rối loạn khi sử dụng các cơ sở dữ liệu khác nhau do công nghệ cơ sở dữ liệu底层 khác nhau. Thông qua thiết kế hệ thống này, có thể nâng cao khả năng lập trình của bản thân, củng cố sự hiểu biết và vận dụng kiến thức đã học.
Mã nguồn cốt lõi Python-Flask
import os
from flask import Blueprint
from utils.file_validator import isValidPythonFile
main_bp = Blueprint('main', __name__, static_folder='static')
import_statement = 'from . import '
view_set = set()
exclude_files = [
# "common.py",
"__init__.py"
]
directory = os.path.join(os.getcwd(), "api/main")
directory = directory.replace("unit_test/", '') if "unit_test/" in directory else directory
for filename in os.listdir(directory):
if filename not in exclude_files and isValidPythonFile(filename):
module_name = filename.split(".", 1)[0]
view_set.add(module_name)
import_statement += ','.join(view_set)
print(import_statement)
exec(import_statement)
Mã nguồn cốt lõi Python-Django
# coding:utf-8
__author__ = "developer"
from django.http import JsonResponse
from .user_models import UserModel
from util.response_codes import *
from util.authentication import Auth
import util.messages as msg
def user_login(request):
if request.method in ["POST", "GET"]:
response = {'code': success_code, "msg": msg.success_message}
request_data = request.session.get("request_data")
if request_data.get('role')!=None:
del request_data['role']
user_data = UserModel.get_by_params(UserModel, UserModel, request_data)
if not user_data:
response['code'] = authentication_error_code
response['msg'] = msg.authentication_error_message
return JsonResponse(response)
request_data['id'] = user_data[0].get('id')
return Auth.authenticate(Auth, UserModel, request_data)
def user_register(request):
if request.method in ["POST", "GET"]:
response = {'code': success_code, "msg": msg.success_message}
request_data = request.session.get("request_data")
error = UserModel.create_by_request(UserModel, UserModel, request_data)
if error != None:
response['code'] = operation_error_code
response['msg'] = error
return JsonResponse(response)
Giải thích cấu trúc dự án Django
Cấu trúc dự án ban đầu của chúng ta bao gồm năm tệp:
- manage.py: Phím tắt cho công cụ dòng lệnh django-admin. Nó được sử dụng để chạy các lệnh quản lý liên quan đến dự án của chúng ta. Chúng ta sẽ sử dụng nó để chạy máy chủ phát triển, chạy kiểm thử, tạo các bản di chuyển, v.v.
- __init__.py: Tệp trống này cho python biết rằng thư mục này là một gói python.
- settings.py: Tệp này chứa tất cả cấu hình của dự án. Trong tương lai, chúng ta sẽ thường xuyên đề cập đến tệp này!
- urls.py: Tệp này chịu trách nhiệm ánh xạ các tuyến đường và đường dẫn trong dự án của chúng ta. Ví dụ, nếu bạn muốn hiển thị một số nội dung khi truy cập URL /about/, bạn phải ánh xạ nó ở đây trước.
- wsgi.py: Tệp này là giao diện cổng đơn giản để triển khai. Bạn có thể tạm thời không quan tâm đến nội dung của nó, cứ để nó ở đó là được.
Django đi kèm một máy chủ web đơn giản. Trong quá trình phát triển, nó rất thuận tiện, vì vậy chúng ta không cần cài đặt bất kỳ phần mềm nào khác để chạy dự án cục bộ. Chúng ta có thể kiểm tra nó bằng cách thực hiện lệnh:
python manage.py runserver
myproject/ <-- Thư mục cấp cao
|-- myproject/ <-- Thư mục dự án Django
| |-- myproject/
| | |-- __init__.py
| | |-- settings.py
| | |-- urls.py
| | |-- wsgi.py
| +- manage.py
|+- venv/ <-- Thư mục môi trường ảo
Cảm nhận cá nhân
Một thao tác tưởng chừng đơn giản với người ngoài ngành lại đằng sau đó là hàng trăm dòng code, đôi khi việc phát triển một dự án có thể cần liên tục trong nhiều ngày thậm chí cả tháng. Phát triển phần mềm là một quá trình phức tạp và đầy thách thức, đối với cá nhân tôi, đây là một hành trình đầy khám phá và trưởng thành. Nhiều người bước vào ngành phát triển phần mềm, nhưng số người thực sự có thể kiên trì lại rất ít, vì ngành phần mềm nổi tiếng về việc làm thêm giờ, và tốc độ cập nhật công nghệ rất nhanh, có thể lúc này bạn vừa nắm vững một công nghệ, thì phiên bản nâng cấp thay thế nó đã xuất hiện. Vì vậy, tôi luôn nhắc nhở bản thân rằng, chỉ cần bạn không nỗ lực, bạn có thể bị người khác vượt qua và thay thế bất cứ lúc nào. Điều này giúp chúng ta nhận thức được tầm quan trọng của việc cập nhật kiến thức của bản thân.
- Hơn nữa hiểu rõ công nghệ và lý thuyết phần mềm.
- Nắm vững phương pháp thiết kế lập trình phần mềm.
- Hơn nữa hiểu rõ việc phát triển và ứng dụng mô hình B/S.
- Nắm vững lập trình phần mềm Python, sử dụng cơ sở dữ liệu MySQL.
- Tăng cường khả năng thực hành.
- Nắm vững phương pháp và kỹ thuật kiểm thử chương trình.
- Lập trình phần mềm là công việc đơn độc và cũng khô khan.
Phân tích tính khả thi
Tính khả thi kinh tế: Website này dựa trên Django/Flask và MySQL, sử dụng nền tảng công nghệ mã nguồn mở nên chi phí kinh tế thấp, người dùng có thể nhấp để xem mà không cần chi phí thêm. Tính khả thi kỹ thuật: Hệ thống dựa trên python và js dễ bảo trì, đồng thời dựa trên hoạt động trình duyệt có lợi thế đa nền tảng, framework Django/Flask tương đối trưởng thành, tốc độ xây dựng nhanh, thuận tiện để phát triển và cập nhật nhanh, MySQL dễ sử dụng và ứng dụng rộng rãi. Tính khả thi vận hành: Hệ thống dựa trên HTML trực quan và đơn giản, người dùng chỉ cần nhấp để thực hiện thao tác, vận hành rất thuận tiện và ngắn gọn. Phân tích yếu tố xã hội: Hệ thống này được thiết kế để giải quyết "điểm đau" của người dùng, vận hành được đơn giản hóa đáng kể, đồng thời thị trường xem phim trực tuyến rộng lớn, phù hợp với nhu cầu thực tế của đại đa số người dùng.
Django được viết bằng Python, thuộc framework ứng dụng web mã nguồn mở. Áp dụng mô hình framework (Mô hình M, View V và Template T). Framework này được đặt theo tên của nghệ sĩ guitar jazz Django Reinhardt người Bỉ. Các thành phần chính của kiến trúc này như sau:
- Đối tượng ánh xạ quan hệ được sử dụng để tạo mô hình.
- Mục tiêu cuối cùng là thiết kế một giao diện quản lý hoàn hảo cho người dùng.
- Là giải pháp thiết kế URL phổ biến nhất hiện nay.
- Ngôn ngữ mẫu thân thiện nhất với nhà thiết kế.
- Hệ thống cache.
Flask mang lại sự linh hoạt và đơn giản hơn, phù hợp với các dự án nhỏ và microservices. Django cung cấp nhiều tính năng tích hợp hơn, phù hợp với các dự án lớn. Flask cho phép nhà phát triển kiểm soát nhiều hơn các thành phần của họ, trong khi Django tuân theo nguyên tắc "sẵn sàng để sử dụng ngay". Flask có khả năng tùy chỉnh cao, người dùng có thể thêm các chức năng tương ứng theo nhu cầu của mình, trong khi vẫn giữ cho các chức năng cốt lõi đơn giản, đồng thời thực hiện sự phong phú và mở rộng chức năng, thư viện plugin mạnh mẽ cho phép người dùng tùy chỉnh cá nhân hóa website, phát triển các website có chức năng mạnh mẽ.
Cách lấy mã nguồn
Liên hệ với tôi qua thông tin ở cuối bài viết. Mọi người hãy like, lưu, theo dõi, bình luận bài viết nhé!
👇🏻 Nhận thông tin liên hệ 👇🏻