from flask import Flask, render_template, request, redirect, url_for, session import sqlite3 from flask_bcrypt import Bcrypt app = Flask(__name__) app.secret_key = "your_secret_key" # 세션을 위한 비밀키 bcrypt = Bcrypt(app) # 데이터베이스 연결 함수 def get_db_connection(): conn = sqlite3.connect("database.db") conn.row_factory = sqlite3.Row return conn # 처음 실행할 때 관리자 계정 생성 (아이디 & 비번 미리 설정) with get_db_connection() as conn: conn.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, username TEXT UNIQUE, password TEXT)") hashed_password = bcrypt.generate_password_hash("password123").decode("utf-8") conn.execute("INSERT OR IGNORE INTO users (username, password) VALUES (?, ?)", ("student1", hashed_password)) conn.commit() # 메인 페이지 @app.route("/") def index(): return render_template("index.html") # 로그인 페이지 @app.route("/login", methods=["GET", "POST"]) def login(): if request.method == "POST": username = request.form["username"] password = request.form["password"] conn = get_db_connection() user = conn.execute("SELECT * FROM users WHERE username = ?", (username,)).fetchone() conn.close() if user and bcrypt.check_password_hash(user["password"], password): session["user"] = username return redirect(url_for("dashboard")) else: return "로그인 실패! 다시 시도하세요." return render_template("login.html") # 대시보드 (로그인한 사용자만 접근 가능) @app.route("/dashboard") def dashboard(): if "user" not in session: return redirect(url_for("login")) # 로그인 안 한 사람은 로그인 페이지로 이동 return render_template("index.html") # 로그아웃 기능 @app.route("/logout") def logout(): session.pop("user", None) return redirect(url_for("index")) if __name__ == "__main__": app.run(debug=True)