Python/Python Flask

Flask와 폼 처리 기법: 폼 유효성 검사 및 사용자 입력 처리

임베디드 친구 2025. 9. 5. 20:02
728x90
반응형

Flask와 폼 처리 기법: 폼 유효성 검사 및 사용자 입력 처리

Flask는 가벼운 웹 프레임워크로, 간단한 웹 애플리케이션에서부터 대규모 애플리케이션까지 다양한 용도로 사용할 수 있습니다. 오늘은 Flask에서 폼 유효성 검사 및 사용자 입력 처리를 다루는 방법을 알아보겠습니다. 예제와 함께 설명하니 따라 하며 실습해 보세요.


1. Flask-WTF를 활용한 폼 처리

Flask에서 폼 유효성 검사를 쉽게 처리하려면 Flask-WTF라는 확장을 사용하는 것이 좋습니다. Flask-WTF는 WTForms를 기반으로 하며, 폼 생성, 데이터 검증, CSRF 보호 등의 기능을 제공합니다.

설치

먼저 Flask와 Flask-WTF를 설치해야 합니다. 다음 명령어를 사용하세요:

pip install flask flask-wtf

2. 기본 폼 클래스 정의

폼 클래스 작성

Flask-WTF에서 폼을 작성하려면 FlaskForm 클래스를 상속받아야 합니다. 예를 들어, 사용자의 이름과 이메일을 입력받는 폼은 다음과 같이 정의할 수 있습니다:

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, Email

class UserForm(FlaskForm):
    name = StringField('이름', validators=[DataRequired(message='이름을 입력해주세요.')])
    email = StringField('이메일', validators=[DataRequired(), Email(message='유효한 이메일 주소를 입력해주세요.')])
    submit = SubmitField('제출')

주요 컴포넌트 설명

  • StringField: 텍스트 입력 필드를 나타냅니다.
  • SubmitField: 제출 버튼을 나타냅니다.
  • validators: 입력값의 유효성을 검사하는 데 사용됩니다.

3. Flask 애플리케이션 설정

Flask 애플리케이션 구성

Flask 애플리케이션을 설정하고, 위에서 작성한 폼을 활용하는 코드를 작성합니다:

from flask import Flask, render_template, request, flash
from user_form import UserForm  # 위에서 작성한 폼 클래스가 들어있는 파일

app = Flask(__name__)
app.secret_key = 'your_secret_key'  # CSRF 보호를 위한 시크릿 키 설정

@app.route('/', methods=['GET', 'POST'])
def index():
    form = UserForm()
    if form.validate_on_submit():
        name = form.name.data
        email = form.email.data
        flash(f'이름: {name}, 이메일: {email}이(가) 제출되었습니다.', 'success')
        return render_template('success.html', name=name, email=email)
    return render_template('index.html', form=form)

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

4. HTML 템플릿 작성

Flask는 Jinja2 템플릿 엔진을 사용하여 HTML을 렌더링합니다. 폼을 표시할 HTML 템플릿을 작성합니다.

templates/index.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() }}
        <p>
            {{ form.name.label }}<br>
            {{ form.name(size=32) }}<br>
            {% for error in form.name.errors %}
                <span style="color: red;">{{ error }}</span><br>
            {% endfor %}
        </p>
        <p>
            {{ form.email.label }}<br>
            {{ form.email(size=32) }}<br>
            {% for error in form.email.errors %}
                <span style="color: red;">{{ error }}</span><br>
            {% endfor %}
        </p>
        <p>{{ form.submit() }}</p>
    </form>
</body>
</html>

templates/success.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>
    <p>이름: {{ name }}</p>
    <p>이메일: {{ email }}</p>
</body>
</html>

5. 실행 및 테스트

애플리케이션을 실행하려면 다음 명령어를 사용합니다:

python app.py

브라우저에서 http://127.0.0.1:5000/에 접속하여 폼을 테스트해 보세요. 유효하지 않은 데이터를 입력하면 에러 메시지가 표시되고, 올바른 데이터를 입력하면 성공 메시지가 표시됩니다.


6. 요약

Flask와 Flask-WTF를 사용하면 간단하면서도 강력한 폼 처리를 구현할 수 있습니다. 이번 글에서는 기본적인 폼 생성부터 유효성 검사, 사용자 입력 처리까지의 과정을 다뤘습니다. 이를 기반으로 다양한 폼을 만들어 보고, 필요에 따라 커스터마이징해 보세요.

반응형