[파이썬] Flask에서의 폼 처리

Flask는 파이썬 웹 프레임워크로, 웹 서비스를 개발하기 위한 다양한 기능을 제공합니다. 폼은 웹 애플리케이션에서 사용자 입력을 받는 가장 일반적인 방법 중 하나입니다. Flask는 폼 데이터를 처리하기 위한 간단하고 유연한 방법을 제공합니다.

폼 생성하기

Flask에서 폼을 생성할 때는 폼 클래스를 정의해야 합니다. 대부분의 경우, Flask-WTF 라이브러리를 사용하여 폼 클래스를 생성할 수 있습니다.

먼저, Flask-WTF를 설치합니다:

pip install flask-wtf

다음은 Flask-WTF를 사용하여 폼 클래스를 생성하는 예시 코드입니다:

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

class MyForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    email = StringField('Email', validators=[DataRequired()])
    submit = SubmitField('Submit')

위의 코드에서 MyForm은 폼 클래스를 정의하는 것이고, StringField는 문자열 입력 필드를 생성하는 것입니다. validators=[DataRequired()]는 필수 입력 필드임을 나타냅니다. SubmitField는 제출 버튼을 생성하는 것입니다.

폼 템플릿 생성하기

폼을 표시하기 위해서는 폼을 렌더링하는 템플릿을 생성해야 합니다. Flask에서는 Jinja2 템플릿 엔진을 사용하여 템플릿을 생성합니다.


<!DOCTYPE html>
<html>
<head>
    <title>My Form</title>
</head>
<body>
    <h1>My Form</h1>
    <form method="POST" action="{{ url_for('process_form') }}">
        {{ form.csrf_token }}
        {{ form.name.label }} {{ form.name() }}<br>
        {{ form.email.label }} {{ form.email() }}<br>
        {{ form.submit() }}
    </form>
</body>
</html>

위의 템플릿에서 form.csrf_token은 CSRF 토큰을 생성하고, form.name.labelname 필드에 대한 라벨을 표시합니다. form.name()name 필드를 표시합니다. 이와 같은 방식으로 다른 필드와 제출 버튼을 템플릿에 추가할 수 있습니다.

폼 처리하기

폼 데이터를 처리하기 위해 Flask에서는 라우트 함수를 생성해야 합니다. 다음은 폼 데이터를 처리하는 예시 코드입니다:

from flask import Flask, render_template, request

app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecretkey'

@app.route('/', methods=['GET', 'POST'])
def process_form():
    form = MyForm()
    
    if form.validate_on_submit():
        name = form.name.data
        email = form.email.data
        # 데이터 처리 로직 수행
        return 'Success'
    
    return render_template('form.html', form=form)

위의 예제에서 form = MyForm()은 폼 객체를 생성하고, form.validate_on_submit()은 폼이 제출되고 유효성 검사를 통과했을 때 True를 반환합니다. 이를 통해 데이터 처리 로직을 수행할 수 있습니다.

요약

이제 Flask에서의 폼 처리에 대한 기본적인 내용을 알아보았습니다. Flask-WTF 라이브러리를 사용하여 폼 클래스를 생성하고, Jinja2 템플릿 엔진을 사용하여 폼을 템플릿에 렌더링하며, 라우트 함수를 사용하여 폼 데이터를 처리할 수 있습니다. 폼을 효율적으로 처리하는 방법은 프로젝트의 요구사항에 따라 다를 수 있으므로, 자세한 내용은 Flask 공식 문서를 참조하시기 바랍니다.