TPACK 기반 수업 디자이너: 사용자 상호작용 및 관리 기능 구현
안녕하세요. ‘InnoClass: TPACK 기반 수업 디자이너’ 프로젝트의 개발 과정을 계속해서 소개해 드리겠습니다. 이번 글에서는 사용자 상호작용을 위한 평가 및 댓글 시스템, 그리고 관리자 기능의 구현에 대해 설명하겠습니다.
평가 시스템 구현
사용자들이 생성된 아이디어를 평가할 수 있도록 별점 시스템을 구현했습니다.
def add_rating(idea_id, rating):
db.ideas.update_one(
{"_id": ObjectId(idea_id)},
{"$push": {"ratings": rating}}
)
# 사용자 인터페이스에서
rating = st.slider("평가", 1, 5, key=f"rating_{idx}")
if st.button("평가 제출", key=f"submit_rating_{idx}"):
add_rating(idea['_id'], rating)
st.success("평가가 제출되었습니다.")
st.experimental_rerun()
댓글 시스템 구현
사용자들이 아이디어에 대해 의견을 나눌 수 있도록 댓글 시스템을 구현했습니다.
def add_comment(idea_id, comment):
comment_id = ObjectId()
db.ideas.update_one(
{"_id": ObjectId(idea_id)},
{"$push": {"comments": {"_id": comment_id, "text": comment, "created_at": datetime.utcnow()}}}
)
return str(comment_id)
# 사용자 인터페이스에서
comment = st.text_area("새 댓글 작성", key=f"comment_{idx}")
if st.button("댓글 작성", key=f"submit_comment_{idx}"):
if comment.strip():
add_comment(idea['_id'], comment)
st.success("댓글이 작성되었습니다.")
st.experimental_rerun()
else:
st.warning("댓글 내용을 입력해주세요.")
관리자 기능 구현
관리자가 부적절한 아이디어나 댓글을 삭제할 수 있도록 관리자 기능을 구현했습니다.
ADMIN_PASSWORD = os.getenv("ADMIN_PASSWORD")
def delete_idea_from_db(idea_id):
return db.ideas.delete_one({"_id": ObjectId(idea_id)})
def delete_comment(idea_id, comment_id):
db.ideas.update_one(
{"_id": ObjectId(idea_id)},
{"$pull": {"comments": {"_id": ObjectId(comment_id)}}}
)
# 사용자 인터페이스에서
admin_password = st.text_input("관리자 비밀번호", type="password", key=f"admin_password_{idx}")
if st.button("삭제", key=f"delete_{str(idea['_id'])}"):
if admin_password == ADMIN_PASSWORD:
delete_idea_from_db(idea['_id'])
st.success("아이디어가 삭제되었습니다.")
st.experimental_rerun()
else:
st.error("잘못된 비밀번호입니다. 관리자만 아이디어를 삭제할 수 있습니다.")
세션 상태 관리
Streamlit의 세션 상태를 활용하여 사용자 경험을 개선했습니다.
import hashlib
def generate_unique_key(prefix, *args):
combined = prefix + ''.join(str(arg) for arg in args)
return hashlib.md5(combined.encode()).hexdigest()
def get_password_key(idea_id, comment_id):
return f"password_{idea_id}_{comment_id}"
# 비밀번호 입력 필드에서
password_key = get_password_key(idea['_id'], comment_id)
if password_key not in st.session_state:
st.session_state[password_key] = ""
admin_password = st.text_input(
"관리자 비밀번호",
type="password",
key=generate_unique_key("admin_password", idea['_id'], comment_id),
value=st.session_state[password_key]
)
st.session_state[password_key] = admin_password
이러한 기능들을 구현함으로써, 우리의 TPACK 기반 수업 디자이너는 단순한 아이디어 생성 도구를 넘어 사용자들이 서로 상호작용하고 피드백을 주고받을 수 있는 플랫폼으로 발전했습니다. 관리자 기능을 통해 콘텐츠의 품질을 유지할 수 있게 되었습니다. 다음 글에서는 프로젝트의 최종 점검, 테스트, 그리고 향후 개선 방향에 대해 논의하도록 하겠습니다.