CS50x 2025 - Lecture 9 - Flask

Tóm tắt ngắn:
- Bài giảng giới thiệu lập trình web bằng Python và framework Flask, kết hợp với HTML, CSS, và JavaScript.
- Các điểm chính bao gồm: giao tiếp giữa trình duyệt và máy chủ web sử dụng HTTP; chuyển từ sử dụng
http-server
(tĩnh) sangflask run
(động); tạo các route và xử lý dữ liệu người dùng thông qua URL và form; sử dụng template engine Jinja để tạo HTML động; thực hiện xác thực người dùng bằng session (cookies); và xây dựng ứng dụng web với kiến trúc MVC (Model-View-Controller). - Ứng dụng được đề cập: xây dựng trang web đăng ký thể thao, trang web bán sách với giỏ hàng, và ứng dụng tìm kiếm phim trên IMDb.
- Các phương pháp được mô tả chi tiết: tạo route, xử lý dữ liệu form (GET và POST), sử dụng template engine Jinja (bao gồm
extends
,block
, điều kiệnif
), sử dụng session để lưu trữ thông tin người dùng, và kết hợp với cơ sở dữ liệu SQL.
Tóm tắt chi tiết:
Bài giảng được chia thành các phần chính sau:
Phần 1: Giới thiệu lập trình web và Flask: Bài giảng bắt đầu bằng việc ôn lại kiến thức về HTTP và cách http-server
phục vụ nội dung tĩnh. Giảng viên nhấn mạnh sự khác biệt giữa lập trình web tĩnh (HTML, CSS) và động (JavaScript, server-side). Flask được giới thiệu như một microframework của Python, giúp đơn giản hóa việc tạo ra các ứng dụng web động. "Today, we're going to focus on things more server side."
Phần 2: Cấu trúc URL và Route: Giảng viên giải thích cấu trúc URL, phân biệt giữa path và route. Route được hiểu là một path mà máy chủ web có thể xử lý, và nó không nhất thiết phải tương ứng với một file thực tế trên hệ thống. Giảng viên cũng giải thích cách truyền tham số người dùng qua URL (key=value).
Phần 3: Xây dựng ứng dụng web đơn giản với Flask: Giảng viên hướng dẫn tạo một ứng dụng web đơn giản bằng Flask, bao gồm hai file: app.py
và requirements.txt
. app.py
chứa mã Python sử dụng decorator @app.route
để định nghĩa route và hàm xử lý route. requirements.txt
liệt kê các thư viện cần thiết. Giảng viên trình bày ví dụ "Hello, world!" và cách trả về HTML trực tiếp từ hàm.
Phần 4: Sử dụng Template Engine Jinja: Giảng viên chỉ ra nhược điểm của việc trả về HTML trực tiếp và giới thiệu cách sử dụng thư viện Jinja để tạo template HTML. Việc sử dụng thư mục templates
và hàm render_template
được giải thích chi tiết. Giảng viên cũng trình bày cách sử dụng placeholder trong template và truyền dữ liệu từ Python sang template.
Phần 5: Xử lý dữ liệu người dùng và form: Giảng viên hướng dẫn cách xử lý dữ liệu người dùng từ URL (GET) và form (POST). request.args
được dùng để lấy dữ liệu từ URL, trong khi request.form
được dùng cho dữ liệu từ form. Giảng viên nhấn mạnh tầm quan trọng của việc xác thực dữ liệu phía server. "You should never, ever trust what the human themselves are sending and you should never rely on client side validation alone."
Phần 6: Xây dựng ứng dụng đăng ký thể thao (Frosh IMs): Giảng viên xây dựng một ứng dụng đăng ký thể thao, minh họa cách sử dụng form, select menu, và radio button. Giảng viên cũng chỉ ra cách xử lý lỗi và thực hiện xác thực dữ liệu phía server.
Phần 7: Sử dụng Session (Cookies): Giảng viên giải thích khái niệm session và cách sử dụng nó để lưu trữ thông tin người dùng. Hàm session
trong Flask được sử dụng để lưu trữ và truy xuất dữ liệu người dùng giữa các request. Giảng viên cũng giải thích về cookies và cách chúng được sử dụng để quản lý session.
Phần 8: Xây dựng ứng dụng giỏ hàng (Shopping Cart): Giảng viên xây dựng một ứng dụng giỏ hàng đơn giản, sử dụng session để lưu trữ danh sách sản phẩm trong giỏ hàng.
Phần 9: Xây dựng ứng dụng tìm kiếm phim (IMDb): Giảng viên xây dựng một ứng dụng tìm kiếm phim đơn giản, kết hợp với cơ sở dữ liệu SQL và sử dụng API để trả về kết quả tìm kiếm dưới dạng JSON. Giảng viên cũng trình bày cách sử dụng JavaScript để cập nhật nội dung trang web động mà không cần tải lại toàn bộ trang.
Bài giảng kết thúc bằng việc nhấn mạnh tầm quan trọng của kiến trúc MVC trong lập trình web và khuyến khích sinh viên áp dụng những kiến thức đã học vào dự án cuối kỳ.