DigitalTransG2 commited on
Commit
4610a05
·
verified ·
1 Parent(s): 97b8c94

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -21
app.py CHANGED
@@ -5,18 +5,17 @@ import requests
5
  # Load Firebase config từ secrets.toml
6
  # ==========================
7
  FIREBASE_URL = st.secrets["firebase_database_url"]
8
- FIREBASE_AUTH = st.secrets["firebase_api_key"] # Nếu muốn dùng auth query param
9
 
10
  # ==========================
11
  # Init session state
12
  # ==========================
13
  if "master_logged_in" not in st.session_state:
14
  st.session_state.master_logged_in = False
15
-
16
  if "student_id" not in st.session_state:
17
  st.session_state.student_id = ""
18
 
19
- st.title("SmartEdu Quiz System")
20
 
21
  # ==========================
22
  # Role Selection
@@ -37,26 +36,39 @@ if role == "Master":
37
  if username == "master" and password == "master":
38
  st.session_state.master_logged_in = True
39
  st.success("Đăng nhập thành công!")
40
- st.stop() # giữ state
41
  else:
42
  st.error("Sai tài khoản hoặc mật khẩu")
43
  st.stop()
44
 
45
- # Master đã đăng nhập → tạo quiz
46
  st.success("Bạn đang đăng nhập với quyền Master")
47
  st.subheader("Tạo Quiz mới")
48
 
49
  quiz_name = st.text_input("Tên Quiz (ví dụ: Quiz1)")
50
- question = st.text_area("Câu hỏi")
51
- correct_answer = st.text_input("Đáp án đúng")
 
 
 
 
 
 
 
 
 
 
52
 
53
  if st.button("Lưu Quiz"):
54
- if quiz_name and question and correct_answer:
55
- url = f"{FIREBASE_URL}/master_quizzes/{quiz_name}.json?auth={FIREBASE_AUTH}"
56
- requests.put(url, json={"question": question, "answer": correct_answer})
57
- st.success(f"Đã lưu quiz '{quiz_name}' dưới Master!")
 
 
58
  else:
59
- st.error("Vui lòng nhập đầy đủ thông tin quiz")
 
 
60
 
61
  # ==========================
62
  # STUDENT SECTION
@@ -78,7 +90,6 @@ if role == "Học sinh":
78
  st.error("Vui lòng nhập đầy đủ thông tin!")
79
 
80
  st.subheader("Làm Quiz")
81
- # Lấy tất cả quiz từ Master node
82
  res = requests.get(f"{FIREBASE_URL}/master_quizzes.json?auth={FIREBASE_AUTH}")
83
  quizzes = res.json() if res.status_code == 200 else {}
84
 
@@ -90,23 +101,33 @@ if role == "Học sinh":
90
 
91
  if quizzes:
92
  for quiz_name, content in quizzes.items():
93
- st.markdown(f"### {quiz_name}")
94
 
95
  # Kiểm tra học sinh đã làm quiz chưa
96
  if student_data and quiz_name in student_data:
97
  st.info(f"Bạn đã làm Quiz này rồi. Điểm: {student_data[quiz_name]}")
98
  continue
99
 
100
- answer = st.text_input(f"Câu trả lời của bạn cho {quiz_name}", key=quiz_name)
 
 
 
 
 
 
 
 
101
 
102
  if st.button(f"Nộp {quiz_name}", key=f"submit_{quiz_name}"):
103
- if answer.strip().lower() == content["answer"].strip().lower():
104
- score = "10/10"
105
- else:
106
- score = "0/10"
 
 
107
 
108
  url_score = f"{FIREBASE_URL}/{student_id}/{quiz_name}.json?auth={FIREBASE_AUTH}"
109
- requests.put(url_score, json=score)
110
- st.success(f"Đã nộp! Điểm: {score}")
111
  else:
112
  st.info("Hiện chưa có quiz nào.")
 
5
  # Load Firebase config từ secrets.toml
6
  # ==========================
7
  FIREBASE_URL = st.secrets["firebase_database_url"]
8
+ FIREBASE_AUTH = st.secrets["firebase_api_key"]
9
 
10
  # ==========================
11
  # Init session state
12
  # ==========================
13
  if "master_logged_in" not in st.session_state:
14
  st.session_state.master_logged_in = False
 
15
  if "student_id" not in st.session_state:
16
  st.session_state.student_id = ""
17
 
18
+ st.title("SmartEdu Quiz System - 10 câu hỏi / quiz")
19
 
20
  # ==========================
21
  # Role Selection
 
36
  if username == "master" and password == "master":
37
  st.session_state.master_logged_in = True
38
  st.success("Đăng nhập thành công!")
39
+ st.stop()
40
  else:
41
  st.error("Sai tài khoản hoặc mật khẩu")
42
  st.stop()
43
 
 
44
  st.success("Bạn đang đăng nhập với quyền Master")
45
  st.subheader("Tạo Quiz mới")
46
 
47
  quiz_name = st.text_input("Tên Quiz (ví dụ: Quiz1)")
48
+
49
+ # Tạo 10 câu hỏi
50
+ questions = []
51
+ for i in range(1, 11):
52
+ st.markdown(f"### Câu hỏi {i}")
53
+ q_text = st.text_input(f"Nội dung câu hỏi {i}", key=f"q{i}")
54
+ options = []
55
+ for j in range(1, 5):
56
+ opt = st.text_input(f"Đáp án {j}", key=f"q{i}_opt{j}")
57
+ options.append(opt)
58
+ correct = st.selectbox(f"Đáp án đúng của câu {i}", ["1", "2", "3", "4"], key=f"q{i}_correct")
59
+ questions.append({"question": q_text, "options": options, "correct": int(correct) - 1})
60
 
61
  if st.button("Lưu Quiz"):
62
+ # Kiểm tra tất cả câu hỏi đã nhập
63
+ valid = all(q["question"] and all(q["options"]) for q in questions)
64
+ if not quiz_name:
65
+ st.error("Nhập tên quiz")
66
+ elif not valid:
67
+ st.error("Nhập đầy đủ câu hỏi và đáp án")
68
  else:
69
+ url = f"{FIREBASE_URL}/master_quizzes/{quiz_name}.json?auth={FIREBASE_AUTH}"
70
+ requests.put(url, json={"questions": questions})
71
+ st.success(f"Đã lưu quiz '{quiz_name}' với 10 câu hỏi!")
72
 
73
  # ==========================
74
  # STUDENT SECTION
 
90
  st.error("Vui lòng nhập đầy đủ thông tin!")
91
 
92
  st.subheader("Làm Quiz")
 
93
  res = requests.get(f"{FIREBASE_URL}/master_quizzes.json?auth={FIREBASE_AUTH}")
94
  quizzes = res.json() if res.status_code == 200 else {}
95
 
 
101
 
102
  if quizzes:
103
  for quiz_name, content in quizzes.items():
104
+ st.markdown(f"## {quiz_name}")
105
 
106
  # Kiểm tra học sinh đã làm quiz chưa
107
  if student_data and quiz_name in student_data:
108
  st.info(f"Bạn đã làm Quiz này rồi. Điểm: {student_data[quiz_name]}")
109
  continue
110
 
111
+ student_answers = []
112
+ for idx, q in enumerate(content["questions"]):
113
+ st.markdown(f"### Câu {idx + 1}: {q['question']}")
114
+ choice = st.radio(
115
+ "Chọn đáp án:",
116
+ q["options"],
117
+ key=f"{quiz_name}_q{idx}"
118
+ )
119
+ student_answers.append(choice)
120
 
121
  if st.button(f"Nộp {quiz_name}", key=f"submit_{quiz_name}"):
122
+ # Chấm điểm
123
+ score = 0
124
+ for ans, q in zip(student_answers, content["questions"]):
125
+ if ans == q["options"][q["correct"]]:
126
+ score += 1
127
+ score_text = f"{score}/10"
128
 
129
  url_score = f"{FIREBASE_URL}/{student_id}/{quiz_name}.json?auth={FIREBASE_AUTH}"
130
+ requests.put(url_score, json=score_text)
131
+ st.success(f"Đã nộp! Điểm: {score_text}")
132
  else:
133
  st.info("Hiện chưa có quiz nào.")