[파이썬] Flask의 폼 처리와 유효성 검사

Flask는 파이썬으로 개발된 마이크로 웹 프레임워크로, 웹 애플리케이션을 쉽게 개발할 수 있게 도와줍니다. Flask의 폼 처리와 유효성 검사 기능을 활용하면 사용자로부터 입력 받은 데이터를 쉽게 처리하고, 검증할 수 있습니다. 이번 포스트에서는 Flask의 폼 처리와 유효성 검사에 대해 알아보겠습니다.

1. Flask-WTF 설치

Flask에서 폼 처리와 유효성 검사를 할 수 있도록 Flask-WTF 라이브러리를 설치해야 합니다. 아래의 명령어를 사용하여 Flask-WTF를 설치합니다.

pip install flask-wtf

2. 폼 클래스 생성

Flask-WTF를 사용하여 폼을 생성하려면, FlaskForm 클래스를 상속받는 폼 클래스를 생성해야 합니다. 예를 들어, 회원가입 폼을 만들고 싶다면 아래와 같이 폼 클래스를 생성합니다.

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

class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
    submit = SubmitField('Sign Up')

위의 코드에서 StringField, PasswordField 등의 필드 클래스는 폼에 필요한 각각의 필드를 정의합니다. validators 매개변수를 사용하여 각 필드에 대한 유효성 검사 규칙을 설정할 수 있습니다.

3. 라우트 함수 작성

이제 폼 클래스를 사용하여 라우트 함수에서 실제로 폼을 렌더링하고 유효성을 검사해보겠습니다. 아래의 예제 코드를 확인해주세요.

from flask import Flask, render_template, redirect, request, flash
from forms import RegistrationForm

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        flash(f'Account created for {form.username.data}!', 'success')
        return redirect('/')
    return render_template('register.html', form=form)

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

위의 코드에서 register 라우트 함수에서 RegistrationForm 폼 클래스를 인스턴스화하여 폼을 생성합니다. form.validate_on_submit() 메소드를 호출하여 유효성 검사를 수행하고, 폼이 제출되면 제출된 데이터를 처리하고 원하는 대로 리디렉션합니다.

4. HTML 템플릿 작성

마지막으로 HTML 템플릿을 작성하여 실제로 폼을 렌더링합니다. 예를 들어, register.html 템플릿은 아래와 같이 작성할 수 있습니다.


{% extends "base.html" %}

{% block content %}
    <h1>Register</h1>
    <form method="POST" action="{{ url_for('register') }}">
        {{ form.hidden_tag() }}
        <div class="form-group">
            {{ form.username.label }} {{ form.username }}
        </div>
        <div class="form-group">
            {{ form.email.label }} {{ form.email }}
        </div>
        <div class="form-group">
            {{ form.password.label }} {{ form.password }}
        </div>
        <div class="form-group">
            {{ form.confirm_password.label }} {{ form.confirm_password }}
        </div>
        <div class="form-group">
            {{ form.submit(class="btn btn-primary") }}
        </div>
    </form>
{% endblock %}

위의 코드는 Flask-WTF에서 제공하는 매크로와 필드 속성을 사용하여 각각의 필드를 렌더링합니다. 각 필드의 레이블과 입력 요소를 위에 보여주고, submit 버튼을 추가하여 폼을 전송할 수 있습니다.

이렇게 Flask의 폼 처리와 유효성 검사 기능을 사용하면 사용자로부터 입력 받은 데이터를 쉽게 처리하고, 유효성을 검사할 수 있습니다. 많은 웹 애플리케이션에서 사용되는 기능이니 익혀두시면 도움이 될 것입니다.