Python Flask

Flask와 폼 처리 기법 Flask-WTF 사용하기

PyExplorer 2025. 1. 27. 10:10
728x90

Flask와 폼 처리 기법 Flask-WTF 사용하기

Flask는 Python으로 웹 애플리케이션을 구축할 때 간단하고 강력한 도구를 제공합니다. 특히, 사용자 입력을 처리하기 위해 폼(form)을 다루는 것이 중요합니다. Flask-WTF는 Flask에서 폼을 쉽게 처리할 수 있도록 돕는 확장 패키지로, 강력한 기능과 간결한 코드를 제공합니다. 이번 포스팅에서는 Flask-WTF를 사용하여 폼을 처리하는 방법을 예제와 함께 알아보겠습니다.


Flask-WTF란?

Flask-WTF는 Flask 애플리케이션에서 WTForms를 쉽게 사용할 수 있도록 통합한 확장 기능입니다. 이 라이브러리는 다음과 같은 기능을 제공합니다:

  • 폼 생성 및 검증
  • CSRF 보호
  • HTML 렌더링을 위한 편리한 헬퍼

Flask-WTF 설치하기

먼저 Flask-WTF를 설치해야 합니다. 아래 명령어를 실행하여 패키지를 설치하세요.

pip install flask-wtf

기본 설정

1. Flask 애플리케이션 생성

Flask 애플리케이션을 생성하고 Flask-WTF를 설정합니다. CSRF 보호를 위해 비밀 키를 설정해야 합니다.

from flask import Flask, render_template, redirect, url_for, flash
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, Email

app = Flask(__name__)
app.secret_key = 'your_secret_key_here'  # CSRF 보호를 위한 비밀 키

2. 폼 클래스 정의

WTForms를 사용하여 폼 클래스를 정의합니다. 사용자가 입력할 필드와 검증 로직을 지정할 수 있습니다.

class LoginForm(FlaskForm):
    email = StringField('이메일', validators=[DataRequired(), Email(), Length(max=50)])
    password = PasswordField('비밀번호', validators=[DataRequired(), Length(min=6, max=20)])
    submit = SubmitField('로그인')

폼 처리 로직 구현

Flask 라우트에서 폼을 처리하는 과정을 구현합니다.

@app.route('/', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        email = form.email.data
        password = form.password.data
        # 여기서 입력된 데이터를 사용하여 인증 로직 추가 가능
        flash(f'{email}님, 로그인 성공!', 'success')
        return redirect(url_for('login'))

    return render_template('login.html', form=form)

HTML 템플릿 작성

Flask-WTF는 form.hidden_tag() 메서드를 통해 CSRF 토큰을 추가하고, 각 필드를 쉽게 렌더링할 수 있도록 지원합니다.

login.html

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>로그인</title>
</head>
<body>
    <h1>로그인</h1>
    <form method="POST" action="">
        {{ form.hidden_tag() }}
        <div>
            {{ form.email.label }}
            {{ form.email }}
            {% for error in form.email.errors %}
                <span style="color: red;">{{ error }}</span>
            {% endfor %}
        </div>
        <div>
            {{ form.password.label }}
            {{ form.password }}
            {% for error in form.password.errors %}
                <span style="color: red;">{{ error }}</span>
            {% endfor %}
        </div>
        <div>
            {{ form.submit }}
        </div>
    </form>
    {% with messages = get_flashed_messages(with_categories=true) %}
        {% if messages %}
            {% for category, message in messages %}
                <p class="{{ category }}">{{ message }}</p>
            {% endfor %}
        {% endif %}
    {% endwith %}
</body>
</html>

실행 결과

Flask 서버를 실행하면 / 경로에서 로그인 폼이 표시됩니다. 폼을 제출하면 입력 검증이 수행되고, 유효한 입력이 제공되었을 경우 성공 메시지가 표시됩니다.


결론

Flask-WTF를 사용하면 폼을 처리하는 작업이 매우 간단해집니다. 특히 CSRF 보호, 폼 검증, 오류 메시지 처리 등 많은 기능을 제공하므로 생산성을 크게 높일 수 있습니다. 앞으로 더 복잡한 폼과 기능을 구현할 때도 Flask-WTF를 활용해보세요!

728x90