Flask로 로그인 기능 구현하기 (세션 활용)
이전 글에서는 Flask를 활용한 웹 애플리케이션 개발 및 데이터베이스 연동을 배웠습니다.
이번 글에서는 사용자 로그인 기능을 구현해 보겠습니다.
로그인 기능을 만들기 위해 다음 개념을 활용합니다.
✅ Flask-WTF → 로그인 폼 생성
✅ Flask-Session → 로그인 유지
✅ SQLite → 사용자 정보 저장
[PYTHON] Flask를 이용한 간단한 웹 애플리케이션 만들기
Flask를 이용한 간단한 웹 애플리케이션 만들기 이전 글에서는 자동 이메일 발송 기능을 구현해 보았습니다.이제 Python을 활용하여 간단한 웹 애플리케이션을 만들어 보겠습니다.웹 애플리케이
englishforkid.tistory.com
1. 필요한 라이브러리 설치
📌 Flask-WTF와 Flask-Session을 설치합니다.
pip install flask flask-wtf flask-session
📌 SQLite는 기본적으로 Python에 포함되어 있어 따로 설치할 필요가 없습니다.
2. 사용자 테이블 생성 (SQLite)
먼저, 사용자의 아이디와 비밀번호를 저장할 데이터베이스를 생성합니다.
import sqlite3
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
# 사용자 테이블 생성
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
)
""")
conn.commit()
conn.close()
✅ username TEXT UNIQUE NOT NULL → 중복된 아이디 방지
✅ password TEXT NOT NULL → 비밀번호 저장
3. Flask 로그인 시스템 구현
3.1 Flask 설정 (app.py)
from flask import Flask, render_template, request, redirect, url_for, session
import sqlite3
from werkzeug.security import generate_password_hash, check_password_hash
app = Flask(__name__)
app.secret_key = "supersecretkey" # 세션을 위한 비밀 키
app.config["SESSION_TYPE"] = "filesystem"
# 데이터베이스 연결 함수
def get_db_connection():
conn = sqlite3.connect("users.db")
conn.row_factory = sqlite3.Row
return conn
# 홈 페이지
@app.route("/")
def home():
if "user" in session:
return f"안녕하세요, {session['user']}님! <a href='/logout'>로그아웃</a>"
return "<a href='/login'>로그인</a> 또는 <a href='/register'>회원가입</a>하세요."
if __name__ == "__main__":
app.run(debug=True)
✅ session["user"] → 로그인된 사용자 정보 저장
✅ secret_key → 세션 데이터를 보호하는 키
3.2 회원가입 기능
사용자가 아이디와 비밀번호를 입력하여 회원가입할 수 있도록 합니다.
📌 HTML 회원가입 폼 (templates/register.html)
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>회원가입</title>
</head>
<body>
<h1>회원가입</h1>
<form method="POST">
아이디: <input type="text" name="username" required><br>
비밀번호: <input type="password" name="password" required><br>
<button type="submit">가입하기</button>
</form>
</body>
</html>
📌 Flask 회원가입 처리 (app.py)
@app.route("/register", methods=["GET", "POST"])
def register():
if request.method == "POST":
username = request.form["username"]
password = generate_password_hash(request.form["password"]) # 비밀번호 암호화
conn = get_db_connection()
cursor = conn.cursor()
try:
cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password))
conn.commit()
return "회원가입 성공! <a href='/login'>로그인</a>"
except sqlite3.IntegrityError:
return "⚠️ 이미 존재하는 아이디입니다. <a href='/register'>다시 시도</a>"
finally:
conn.close()
return render_template("register.html")
✅ generate_password_hash(password) → 비밀번호 암호화
✅ sqlite3.IntegrityError → 중복 아이디 방지
3.3 로그인 기능
📌 HTML 로그인 폼 (templates/login.html)
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>
<h1>로그인</h1>
<form method="POST">
아이디: <input type="text" name="username" required><br>
비밀번호: <input type="password" name="password" required><br>
<button type="submit">로그인</button>
</form>
</body>
</html>
📌 Flask 로그인 처리 (app.py)
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))
user = cursor.fetchone()
conn.close()
if user and check_password_hash(user["password"], password): # 비밀번호 검증
session["user"] = username
return redirect(url_for("home"))
else:
return "⚠️ 아이디 또는 비밀번호가 올바르지 않습니다. <a href='/login'>다시 시도</a>"
return render_template("login.html")
✅ check_password_hash(user["password"], password) → 입력한 비밀번호 확인
✅ session["user"] = username → 로그인된 사용자 세션 유지
3.4 로그아웃 기능
로그인 상태를 유지하는 세션을 삭제하여 로그아웃할 수 있도록 합니다.
📌 Flask 로그아웃 처리 (app.py)
@app.route("/logout")
def logout():
session.pop("user", None) # 세션 삭제
return redirect(url_for("home"))
✅ session.pop("user", None) → 로그인 정보 삭제
4. 최종 실행 방법
1️⃣ 데이터베이스 테이블 생성
python create_db.py
2️⃣ Flask 웹 애플리케이션 실행
python app.py
3️⃣ 브라우저에서 테스트
- http://127.0.0.1:5000/register → 회원가입
- http://127.0.0.1:5000/login → 로그인
- http://127.0.0.1:5000/logout → 로그아웃
5. 결론
이번 글에서는 Flask로 로그인 시스템을 구축하는 방법을 배웠습니다.
- SQLite로 사용자 정보 저장
- Flask에서 회원가입 및 로그인 구현
- 비밀번호 암호화 및 세션 활용
다음 글에서는 Flask와 Bootstrap을 활용하여 UI를 개선하는 방법을 배워보겠습니다! 🚀
[PYTHON] 파이썬 웹 크롤링 데이터를 활용한 데이터 분석
웹 크롤링 데이터를 활용한 데이터 분석 이전 글에서는 **웹 크롤링(Web Scraping)**을 이용해 웹에서 데이터를 수집하는 방법을 배웠습니다.그렇다면 크롤링한 데이터를 어떻게 활용할 수 있을까
englishforkid.tistory.com
[PYTHON] Python으로 자동 이메일 발송하기 (SMTP 활용)
Python으로 자동 이메일 발송하기 (SMTP 활용) 이전 글에서는 크롤링한 데이터를 자동으로 보고서로 저장하는 방법을 배웠습니다.이제 이 보고서를 이메일로 자동 전송할 수 있다면 더욱 편리하겠
englishforkid.tistory.com
'BIG DATA > PYTHON' 카테고리의 다른 글
[PYTHON] Flask에서 사용자 프로필 페이지 만들기 (0) | 2025.02.28 |
---|---|
[PYTHON] Flask와 Bootstrap을 활용한 UI 개선 (0) | 2025.02.27 |
[PYTHON] Flask를 이용한 간단한 웹 애플리케이션 만들기 (0) | 2025.02.24 |
[PYTHON] Python으로 자동 이메일 발송하기 (SMTP 활용) (0) | 2025.02.24 |
[PYTHON] 파이썬으로 자동화된 데이터 보고서 생성하기 (0) | 2025.02.23 |