Chapter 5-3 Flask와 Jinja를 활용한 사용자 관리 웹 애플리케이션

2025. 4. 23. 10:21·Flask

📌 Flask와 Jinja를 활용한 사용자 관리 웹 애플리케이션

이 프로젝트에서는 Flask와 Jinja 템플릿을 사용하여 간단한 사용자 관리 웹 애플리케이션을 구축합니다. 사용자를 추가, 수정, 삭제할 수 있는 기능과 목록을 확인할 수 있는 페이지를 제작합니다.


🚦 동작 원리 및 구조

Flask 웹 애플리케이션은 다음과 같은 구조를 가집니다:

URL 경로 기능 설명

/ 사용자 목록 표시
/add 사용자 추가 (GET, POST)
/edit/<username> 사용자 정보 수정 (GET, POST)
/delete/<username> 사용자 삭제

데이터는 임시로 메모리에 저장된 리스트 형태로 관리됩니다.


💻 코드 예시 및 흐름 분석

app.py

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

app = Flask(__name__)

# 사용자 데이터
users = [
    {"username": "traveler", "name": "Alex"},
    {"username": "photographer", "name": "Sam"},
    {"username": "gourmet", "name": "Chris"}
]

# 사용자 목록 페이지
@app.route('/')
def index():
    return render_template('index.html', users=users)

# 사용자 추가
@app.route('/add', methods=['GET', 'POST'])
def add_user():
    if request.method == 'POST':
        username = request.form['username']
        name = request.form['name']
        users.append({'username': username, 'name': name})
        return redirect(url_for('index'))
    return render_template('add_user.html')

# 사용자 수정
@app.route('/edit/<username>', methods=['GET', 'POST'])
def edit_user(username):
    user = next((u for u in users if u['username'] == username), None)
    if user is None:
        return redirect(url_for('index'))
    if request.method == 'POST':
        user['name'] = request.form['name']
        return redirect(url_for('index'))
    return render_template('edit_user.html', user=user)

# 사용자 삭제
@app.route('/delete/<username>')
def delete_user(username):
    global users
    users = [u for u in users if u['username'] != username]
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

🖥️ HTML 템플릿 구성

  • templates/index.html
<!DOCTYPE html>
<html>
<head>
    <title>User Management</title>
</head>
<body>
    <h1>User List</h1>
    <ul>
    {% for user in users %}
        <li>{{ user.name }} ({{ user.username }})
            <a href="/edit/{{ user.username }}">Edit</a>
            <a href="/delete/{{ user.username }}">Delete</a>
        </li>
    {% endfor %}
    </ul>
    <a href="/add">Add User</a>
</body>
</html>
  • templates/add_user.html
<!DOCTYPE html>
<html>
<head>
    <title>Add User</title>
</head>
<body>
    <h1>Add User</h1>
    <form method="post">
        Username: <input type="text" name="username"><br>
        Name: <input type="text" name="name"><br>
        <input type="submit" value="Add">
    </form>
    <a href="{{ url_for('index') }}">Back</a>
</body>
</html>
  • templates/edit_user.html
<!DOCTYPE html>
<html>
<head>
    <title>Edit User</title>
</head>
<body>
    <h1>Edit User</h1>
    <form method="post">
        Name: <input type="text" name="name" value="{{ user.name }}"><br>
        <input type="submit" value="Update">
    </form>
    <a href="{{ url_for('index') }}">Back</a>
</body>
</html>

🧪 실전 사례 및 테스트

  1. 웹 서버 실행: python app.py
  2. 브라우저에서 http://127.0.0.1:5000/ 접속하여 사용자 목록 확인
  3. 사용자 추가, 수정, 삭제 기능 동작 테스트

🧠 고급 팁 or 자주 하는 실수

✅ 사용자 데이터는 메모리에 저장되므로, 서버가 종료되면 데이터가 사라집니다. 실제 배포 시 데이터베이스를 활용해야 합니다. ✅ 사용자 추가 시 동일한 사용자 이름을 중복 등록하지 않도록 예외 처리를 추가하는 것이 좋습니다. ✅ 수정이나 삭제 시, 존재하지 않는 사용자를 처리하는 예외 로직을 추가해 안정성을 높일 수 있습니다.


✅ 마무리 요약 및 복습 포인트

  • Flask와 Jinja를 이용하여 사용자 관리 웹을 손쉽게 구현할 수 있습니다.
  • 라우트와 폼 처리를 통해 사용자 추가, 수정, 삭제 기능을 명확하게 구현할 수 있습니다.
  • 데이터의 유효성을 확인하고 오류 처리 로직을 추가하는 것이 안정적인 웹 애플리케이션 구현의 핵심입니다.

'Flask' 카테고리의 다른 글

Chapter 5-5 Flask 기반 JWT 인증과 Todo 앱 구축  (0) 2025.04.23
Chapter 5-4 Flask로 만드는 인스타그램 REST API  (0) 2025.04.23
Chapter 5-2 Flask Authentication / Flask-JWT-Extended  (0) 2025.04.23
Chapter 5-1 Flask Authentication / Flask-login  (0) 2025.04.22
Chapter 4-8(1) Flask 애플리케이션에서 HTTP 기본 인증 사용  (0) 2025.04.22
'Flask' 카테고리의 다른 글
  • Chapter 5-5 Flask 기반 JWT 인증과 Todo 앱 구축
  • Chapter 5-4 Flask로 만드는 인스타그램 REST API
  • Chapter 5-2 Flask Authentication / Flask-JWT-Extended
  • Chapter 5-1 Flask Authentication / Flask-login
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (807)
      • Python (32)
      • 프로젝트 (116)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (42)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    bts
    btsjungkook
    gpterror
    trumpmuskclash
    btsreunion
    livebroadcast
    remittance
    global politics
    basalcellcarcinoma
    smartphonedurability
    youngprofessionals
    life reflection
    chinanightlife
    뷔
    RM
    btscomeback
    homebartrend
    hotcoffeecase
    titaniumcase
    college reunions
    classaction
    travel ban
    chatgpterror
    btsdischarge
    newpoliticalparty
    self-growth
    urbantrends
    lawsuitculture
    americanlaw
    americaparty
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 5-3 Flask와 Jinja를 활용한 사용자 관리 웹 애플리케이션
상단으로

티스토리툴바