Hiển thị các bài đăng có nhãn Thực hành html làm web. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Thực hành html làm web. Hiển thị tất cả bài đăng

Thứ Ba, 4 tháng 11, 2025

Bài 4: Flask + SQLite (CRUD hoàn chỉnh)

📘 BÀI 4: FLASK + SQLITE (CẬP NHẬT & XÓA DỮ LIỆU – CRUD HOÀN CHỈNH)


🎯 Mục tiêu bài học

  • Hiểu mô hình CRUD (Create – Read – Update – Delete).
  • Hoàn thiện ứng dụng Flask quản lý học sinh.
  • Tạo giao diện chỉnh sửa và xóa học sinh trực tiếp từ bảng dữ liệu.
CRUD Flask illustration

🧩 1. Cấu trúc thư mục dự án


flask_crud/
 ├─ app.py
 ├─ students.db
 └─ templates/
      ├─ index.html
      ├─ list.html
      └─ edit.html

⚙️ 2. File app.py


import sqlite3
from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)

# --- Tạo database ---
def init_db():
    conn = sqlite3.connect('students.db')
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS students (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    hoten TEXT,
                    lop TEXT,
                    diem REAL
                )''')
    conn.commit()
    conn.close()

# --- Trang nhập học sinh ---
@app.route('/')
def index():
    return render_template('index.html')

# --- Lưu học sinh mới ---
@app.route('/add', methods=['POST'])
def add():
    hoten = request.form.get('hoten')
    lop = request.form.get('lop')
    diem = request.form.get('diem')
    conn = sqlite3.connect('students.db')
    c = conn.cursor()
    c.execute("INSERT INTO students (hoten, lop, diem) VALUES (?, ?, ?)",
              (hoten, lop, diem))
    conn.commit()
    conn.close()
    return redirect('/list')

# --- Xem danh sách ---
@app.route('/list')
def list_students():
    conn = sqlite3.connect('students.db')
    c = conn.cursor()
    c.execute("SELECT * FROM students")
    data = c.fetchall()
    conn.close()
    return render_template('list.html', students=data)

# --- Chỉnh sửa ---
@app.route('/edit/', methods=['GET', 'POST'])
def edit(id):
    conn = sqlite3.connect('students.db')
    c = conn.cursor()
    if request.method == 'POST':
        hoten = request.form.get('hoten')
        lop = request.form.get('lop')
        diem = request.form.get('diem')
        c.execute("UPDATE students SET hoten=?, lop=?, diem=? WHERE id=?",
                  (hoten, lop, diem, id))
        conn.commit()
        conn.close()
        return redirect(url_for('list_students'))
    else:
        c.execute("SELECT * FROM students WHERE id=?", (id,))
        data = c.fetchone()
        conn.close()
        return render_template('edit.html', hs=data)

# --- Xóa ---
@app.route('/delete/')
def delete(id):
    conn = sqlite3.connect('students.db')
    c = conn.cursor()
    c.execute("DELETE FROM students WHERE id=?", (id,))
    conn.commit()
    conn.close()
    return redirect('/list')

if __name__ == '__main__':
    init_db()
    app.run(debug=True)
💡 Giải thích:
- /edit/<id> hiển thị form chỉnh sửa học sinh theo mã.
- /delete/<id> xóa học sinh được chọn.
- url_for() giúp Flask điều hướng linh hoạt.

📋 3. File templates/index.html – Form thêm học sinh


<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<title>Thêm học sinh</title>
<style>
body { font-family: Arial; background: #e9f4ff; display: flex; justify-content: center; align-items: center; height: 100vh; }
.form-box { background: white; padding: 30px; border-radius: 8px; box-shadow: 0 0 10px rgba(0,0,0,0.2); width: 400px; }
input { width: 100%; padding: 8px; margin-top: 6px; border: 1px solid #ccc; border-radius: 5px; }
button { width: 100%; background: #2980b9; color: #fff; padding: 10px; border: none; border-radius: 5px; margin-top: 15px; }
a { display: block; text-align: center; margin-top: 10px; }
</style>
</head>
<body>
  <form class="form-box" action="/add" method="POST">
    <h2>➕ Thêm học sinh</h2>
    <label>Họ và tên:</label>
    <input type="text" name="hoten" required>
    <label>Lớp:</label>
    <input type="text" name="lop" required>
    <label>Điểm trung bình:</label>
    <input type="number" name="diem" min="0" max="10" step="0.1" required>
    <button type="submit">Lưu học sinh</button>
    <a href="/list">📋 Xem danh sách</a>
  </form>
</body>
</html>

📄 4. File templates/list.html – Danh sách học sinh


<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<title>Danh sách học sinh</title>
<style>
body { font-family: Arial; background: #f0f4f8; padding: 30px; }
table { width: 100%; border-collapse: collapse; margin-top: 15px; }
th, td { border: 1px solid #ccc; padding: 10px; text-align: center; }
th { background: #e9f2ff; }
a.button { background: #2980b9; color: white; padding: 6px 12px; border-radius: 5px; text-decoration: none; }
a.del { background: #e74c3c; }
</style>
</head>
<body>
  <h2>📚 Danh sách học sinh</h2>
  <table>
    <tr>
      <th>Mã</th><th>Họ tên</th><th>Lớp</th><th>Điểm TB</th><th>Hành động</th>
    </tr>
    {% for hs in students %}
    <tr>
      <td>{{ hs[0] }}</td><td>{{ hs[1] }}</td><td>{{ hs[2] }}</td><td>{{ hs[3] }}</td>
      <td>
        <a class="button" href="/edit/{{ hs[0] }}">✏️ Sửa</a>
        <a class="button del" href="/delete/{{ hs[0] }}" onclick="return confirm('Bạn có chắc muốn xóa?')">🗑️ Xóa</a>
      </td>
    </tr>
    {% endfor %}
  </table>
  <a href="/" class="button">➕ Thêm học sinh mới</a>
</body>
</html>

🧾 5. File templates/edit.html – Chỉnh sửa học sinh


<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<title>Chỉnh sửa học sinh</title>
<style>
body { font-family: Arial; background: #f0f4f8; display: flex; justify-content: center; align-items: center; height: 100vh; }
.form-box { background: white; padding: 30px; border-radius: 8px; box-shadow: 0 0 10px rgba(0,0,0,0.2); width: 400px; }
input { width: 100%; padding: 8px; margin-top: 6px; border: 1px solid #ccc; border-radius: 5px; }
button { width: 100%; background: #2980b9; color: #fff; padding: 10px; border: none; border-radius: 5px; margin-top: 15px; }
</style>
</head>
<body>
  <form class="form-box" method="POST">
    <h2>✏️ Cập nhật học sinh</h2>
    <label>Họ và tên:</label>
    <input type="text" name="hoten" value="{{ hs[1] }}" required>
    <label>Lớp:</label>
    <input type="text" name="lop" value="{{ hs[2] }}" required>
    <label>Điểm trung bình:</label>
    <input type="number" name="diem" value="{{ hs[3] }}" min="0" max="10" step="0.1" required>
    <button type="submit">Cập nhật</button>
    <a href="/list">⬅️ Quay lại</a>
  </form>
</body>
</html>

🏁 6. Kết quả khi chạy

Khi truy cập http://127.0.0.1:5000, bạn có thể:

  • ➕ Thêm học sinh
  • 📋 Xem danh sách
  • ✏️ Sửa học sinh
  • 🗑️ Xóa học sinh
Flask CRUD demo

🚀 7. Thử thách mở rộng cho học sinh

  • Thêm ô tìm kiếm theo tên hoặc lớp.
  • Thêm phân loại học lực (Giỏi – Khá – Trung bình).
  • Làm trang thống kê tổng số học sinh và điểm TB cao nhất.

📚 Kết luận

  • Bạn đã xây dựng được ứng dụng Flask hoàn chỉnh có cơ sở dữ liệu thực.
  • Đây là mô hình chuẩn CRUD trong lập trình web.
  • Có thể dùng kiến thức này để tạo ứng dụng quản lý học sinh, thư viện, hoặc câu lạc bộ trong trường.

© 2025 Trường THPT Phan Chu Trinh – Gia Lai | Bài giảng Flask – Phần 4: CRUD hoàn chỉnh

Thứ Hai, 3 tháng 11, 2025

🌐 Top 5 Dự án Website học sinh THPT có thể tự làm và trình bày tại lớp

Việc học lập trình web không chỉ dừng ở lý thuyết HTML – CSS – JavaScript, mà còn là cơ hội để học sinh sáng tạo, kể câu chuyện của chính mình qua công nghệ. Bài viết này tổng hợp 5 dự án website nhỏ gọn, dễ làm nhưng rất “ấn tượng” mà học sinh THPT có thể tự thực hiện và trình bày ngay trên lớp.

I. Vì sao nên để học sinh tự làm dự án website?

  • 🎯 Giúp học sinh áp dụng kiến thức HTML – CSS – JS vào thực tế.
  • 💡 Khơi gợi sáng tạo cá nhân, tinh thần làm việc nhóm và kỹ năng trình bày.
  • 📊 Tăng khả năng ghi nhớ kiến thức qua thực hành và tự khám phá lỗi sai.
  • 🏫 Thầy cô có thể đánh giá năng lực học sinh qua sản phẩm cụ thể – dễ dàng, sinh động.

II. Top 5 dự án website phù hợp với học sinh THPT

1️⃣ Website giới thiệu lớp học – “Trang web lớp em”

Nội dung: Giới thiệu lớp, danh sách thành viên, thành tích học tập, hoạt động ngoại khóa. Học sinh có thể tự chụp ảnh, thêm phần “Thư gửi thầy cô” hoặc “Khoảnh khắc đáng nhớ”.

Kỹ thuật: HTML + CSS (cấu trúc + trang trí), có thể thêm hiệu ứng cuộn nhẹ bằng scroll-behavior: smooth;.

Trình bày: Nhóm học sinh trình chiếu website ngay trên máy chiếu, giới thiệu từng phần.

2️⃣ Website cá nhân – “Portfolio học sinh sáng tạo”

Nội dung: Giới thiệu bản thân, kỹ năng, ước mơ nghề nghiệp, dự án nhỏ từng thực hiện. Đây là bước đầu để học sinh hình thành “hồ sơ học tập số”.

Kỹ thuật: HTML + CSS cơ bản, thêm hiệu ứng chuyển động nhẹ bằng CSS Animation hoặc thư viện AOS.js.

💡 Mẹo: Dùng ảnh nền gradient và font chữ Google Fonts (như Poppins, Roboto) để giao diện chuyên nghiệp hơn.

3️⃣ Website chia sẻ kiến thức môn học

Nội dung: Học sinh chọn một môn yêu thích (Toán, Lý, Hóa, Sinh, Văn…) và làm trang web “Tự học cùng tôi”. Có thể chia thành các phần: Công thức – Bài tập – Ứng dụng – Mẹo học tốt.

Kỹ thuật: HTML + CSS + nhúng video từ YouTube hoặc bài viết từ Blogspot qua iframe.

Giá trị học tập: Học sinh vừa rèn tư duy trình bày, vừa học cách truyền đạt nội dung một cách khoa học.

4️⃣ Website sản phẩm sáng tạo / CLB trong trường

Nội dung: Trang web giới thiệu Câu lạc bộ Tin học, CLB Âm nhạc, CLB Tình nguyện hoặc dự án khoa học của học sinh.

Kỹ thuật: HTML + CSS + JavaScript cơ bản (hiệu ứng bấm nút, chuyển ảnh).

Gợi ý trình bày: Chèn slider ảnh hoạt động CLB, phần liên hệ hoặc form đăng ký thành viên mới.

5️⃣ Website tin tức trường học

Nội dung: Trang web cập nhật tin tức học tập, hoạt động, khen thưởng của trường. Mỗi học sinh hoặc nhóm đảm nhiệm một “chuyên mục” khác nhau.

Kỹ thuật: HTML + CSS + sử dụng <article>, <section>, <nav> chuẩn SEO để trình bày.

Mở rộng: Có thể thêm mục “Gửi bài viết” bằng form để học sinh khác đóng góp tin.

III. Công cụ và nền tảng học sinh có thể sử dụng

  • 💻 Replit – Dễ dùng, lưu code và chạy trực tuyến.
  • 🌐 CodePen – Hiển thị trực quan HTML, CSS, JS.
  • 📦 GitHub Pages – Lưu trữ miễn phí, có thể chia sẻ website với bạn bè.
  • 📂 Google Drive – Lưu tệp HTML, mở trực tiếp trong trình duyệt.

💡 Gợi ý cho thầy cô: Khi học sinh hoàn thành, nên cho các nhóm trình chiếu, chia sẻ “mã nguồn và ý tưởng”, tạo không khí học tập sôi nổi, khuyến khích tinh thần sáng tạo.

🎯 Kết luận

Những dự án website nhỏ như trên không chỉ giúp học sinh luyện kỹ năng lập trình mà còn phát triển khả năng sáng tạo, làm việc nhóm và thuyết trình — các kỹ năng thiết yếu của công dân thời đại số. Chỉ cần một máy tính và vài giờ học, học sinh có thể tự tay tạo nên sản phẩm công nghệ đầu tiên của mình.

💡 Gợi ý tiếp theo: Thầy Rcom Dăm Yi có thể mở chuỗi “Mini Project Web” trên blog, trong đó mỗi bài hướng dẫn chi tiết 1 dự án — kèm code mẫu, hình minh họa và video hướng dẫn. Chuỗi này sẽ thu hút học sinh và tăng thời gian ở lại trang.


🪶 Bài viết: Rcom Dăm Yi | Blog: tuhocxyz.blogspot.com
📅 Cập nhật: Tháng 11 / 2025

💻 Các bài thực hành thiết kế web phù hợp với học sinh THPT

Trong chương trình Tin học 12, phần “Thiết kế trang web” là một nội dung thú vị giúp học sinh vừa học kiến thức vừa rèn tư duy thẩm mỹ và kỹ năng số. Bài viết này giới thiệu các bài thực hành thiết kế web đơn giản – trực quan – sáng tạo phù hợp với lứa tuổi học sinh THPT, giúp thầy cô dễ hướng dẫn, học sinh dễ thực hành tại lớp hoặc ở nhà.

I. Mục tiêu của các bài thực hành

  • ✅ Làm quen với cấu trúc cơ bản của một trang web: HTML – CSS.
  • ✅ Hiểu được vai trò của thẻ, thuộc tính, hình ảnh, liên kết, bảng và biểu mẫu.
  • ✅ Biết cách trình bày nội dung trang web khoa học, dễ đọc, thân thiện với người dùng.
  • ✅ Phát triển tư duy logic, khả năng sáng tạo và tinh thần làm việc nhóm.

II. 5 bài thực hành tiêu biểu cho học sinh THPT

🔹 Bài 1. Thiết kế trang “Giới thiệu bản thân”

Mục tiêu: Làm quen với các thẻ HTML cơ bản: <h1>, <p>, <img>, <a>.

Yêu cầu: Tạo một trang có ảnh cá nhân, thông tin lớp, sở thích và liên kết tới mạng xã hội (nếu có).

💡 Gợi ý mở rộng: Cho học sinh thêm phần "Mục tiêu nghề nghiệp" hoặc "Ước mơ" để bài học gần gũi và sinh động hơn.

🔹 Bài 2. Trang giới thiệu trường THPT

Mục tiêu: Hiểu cấu trúc trang web có nhiều phần nội dung, sử dụng tiêu đề và hình ảnh minh họa.

Yêu cầu: Tạo trang web gồm: Giới thiệu trường, cơ sở vật chất, hoạt động học sinh, liên hệ.

Kỹ năng: Dùng thẻ <div> để chia khu vực, kết hợp với CSS để định dạng nền, màu, căn chỉnh chữ.

🔹 Bài 3. Thiết kế thực đơn trang web (Menu & Liên kết)

Mục tiêu: Làm quen với thẻ danh sách <ul>, <li> và thẻ liên kết <a>.

Yêu cầu: Tạo menu dẫn tới các trang nhỏ như “Trang chủ”, “Giới thiệu”, “Liên hệ”, “Hình ảnh”.

CSS: Thêm hiệu ứng hover để menu đổi màu khi di chuột qua.

🔹 Bài 4. Trang giới thiệu sản phẩm hoặc câu lạc bộ

Mục tiêu: Biết cách trình bày thông tin dạng bảng hoặc thẻ sản phẩm bằng HTML + CSS.

Yêu cầu: Tạo trang web có các “mục sản phẩm” hoặc “thành viên CLB” kèm ảnh, mô tả ngắn và nút “Xem thêm”.

CSS: Áp dụng layout dạng grid hoặc flexbox để sắp xếp các phần tử gọn gàng.

🔹 Bài 5. Trang liên hệ (Form liên hệ đơn giản)

Mục tiêu: Làm quen với thẻ <form> và các phần tử nhập liệu <input>, <textarea>, <button>.

Yêu cầu: Thiết kế form thu thập thông tin gồm Họ tên, Email, Nội dung, Nút gửi.

Gợi ý: Thầy cô có thể cho học sinh làm dự án nhỏ: “Hộp thư góp ý trực tuyến của lớp học”.

III. Gợi ý công cụ hỗ trợ học sinh thực hành

  • 💻 Replit.com – Viết và chạy code trực tuyến, không cần cài phần mềm.
  • 🌐 CodePen.io – Trực quan, có thể xem kết quả HTML/CSS ngay.
  • 🧩 GitHub Pages – Đăng tải trang web học sinh lên mạng miễn phí.

💡 Mẹo nhỏ: Học sinh có thể lưu file HTML vào Google Drive hoặc USB, sau đó mở bằng trình duyệt để trình chiếu bài thực hành ngay trên lớp.

🎯 Kết luận

Qua các bài thực hành thiết kế web, học sinh THPT không chỉ học kỹ năng lập trình mà còn phát triển tư duy sáng tạo, khả năng trình bày và thẩm mỹ số. Đây là nền tảng để các em có thể tiến xa hơn trong các lĩnh vực như khoa học máy tính, thiết kế UI/UX, truyền thông số và khởi nghiệp công nghệ.

💡 Gợi ý mở rộng: Thầy cô có thể giao dự án nhóm “Thiết kế website lớp em” – học sinh tự chọn chủ đề, phân công nhiệm vụ và trình bày trước lớp. Đây là hoạt động vừa học vừa vui, khuyến khích sáng tạo và hợp tác.


🪶 Bài viết: Rcom Dăm Yi | Blog: tuhocxyz.blogspot.com
📅 Cập nhật: Tháng 11 / 2025

Bài đăng phổ biến

💬 Bình luận

💬 Bình luận

📌 Danh sách bình luận