Flask-WTF는 Flask 웹 프레임워크에서 폼을 쉽게 생성하고 유효성 검사를 처리하는 데 도움을 주는 확장입니다. 이 확장을 사용하면 HTML 폼을 생성하고 사용자로부터의 입력을 쉽게 처리할 수 있게 됩니다. 이번 블로그 포스트에서는 Flask-WTF 확장의 기본적인 사용법을 알아보겠습니다.
Flask-WTF 설치
Flask-WTF를 사용하기 위해서는 먼저 Flask와 WTForms도 설치해야 합니다. 다음 명령을 사용하여 Flask-WTF를 설치하세요:
$ pip install Flask-WTF
폼 클래스 생성
Flask-WTF를 사용하여 폼을 생성하려면 먼저 폼 클래스를 정의해야 합니다. 폼 클래스는 WTForms의 Form
클래스를 상속받는 파이썬 클래스입니다. 예를 들어, 사용자로부터 이름과 이메일 주소를 입력 받는 폼을 생성하려면 다음과 같이 폼 클래스를 정의할 수 있습니다:
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, Email
class MyForm(FlaskForm):
name = StringField('Name', validators=[DataRequired()])
email = StringField('Email', validators=[DataRequired(), Email()])
submit = SubmitField('Submit')
위의 코드에서 StringField
와 SubmitField
는 입력 필드와 폼 전송 버튼을 생성하는데 사용되는 WTForms의 클래스입니다. validators
매개변수를 통해 각 필드의 유효성 검사 규칙을 지정할 수 있습니다.
라우트 함수
폼을 생성했다면, 해당 폼을 사용할 라우트 함수를 작성해야 합니다. Flask-WTF를 사용하면 간단한 데코레이터를 이용하여 CSRF 보호와 같은 폼 처리를 손쉽게 할 수 있습니다. 다음은 예시입니다:
from flask import Flask, render_template
from flask_wtf import CSRFProtect
app = Flask(__name__)
# CSRF 보호를 위해 활성화
csrf = CSRFProtect(app)
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
if form.validate_on_submit():
# 폼이 제출되고 유효할 경우 처리하는 로직 작성
name = form.name.data
email = form.email.data
# 처리 로직 추가...
return "Success"
return render_template('index.html', form=form)
위의 코드에서 validate_on_submit()
메소드를 사용하여 폼이 제출되었고 유효한지 검사합니다. 폼이 유효한 경우 해당 폼 필드의 데이터를 얻을 수 있습니다. 이후 해당 데이터로 처리 로직을 추가하면 됩니다.
템플릿 파일
마지막으로, 폼을 표시할 HTML 템플릿 파일을 작성해야 합니다. 템플릿 파일에서는 WTForms의 form
객체에서 필드를 생성하고 렌더링할 수 있습니다. 예를 들어, index.html
템플릿 파일은 다음과 같이 작성할 수 있습니다:
<!DOCTYPE html>
<html>
<head>
<title>Flask-WTF Example</title>
</head>
<body>
<h1>Flask-WTF Example</h1>
<form method="POST">
{{ form.csrf_token }}
{{ form.name.label }} {{ form.name() }}
{% if form.name.errors %}
<ul>
{% for error in form.name.errors %}
<li style="color: red;">{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
{{ form.email.label }} {{ form.email() }}
{% if form.email.errors %}
<ul>
{% for error in form.email.errors %}
<li style="color: red;">{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
{{ form.submit() }}
</form>
</body>
</html>
위의 코드에서 {{ form.csrf_token }}
은 CSRF 토큰 필드를 생성하는데 사용되며, 나머지 필드는 {{ 필드명.label }} {{ 필드명() }}
형식으로 렌더링합니다. 또한 각 필드에 대한 유효성 검사 오류 메시지를 출력하기 위해 if
조건문을 사용합니다.
이제 Flask 웹 애플리케이션에서 Flask-WTF 확장을 사용하여 폼을 생성하고 처리할 수 있는 기본적인 내용을 알아보았습니다. Flask-WTF은 다양한 폼 필드 및 유효성 검사 규칙을 지원하므로, 필요에 맞게 활용하여 웹 애플리케이션을 개발할 수 있습니다.
더 자세한 내용은 Flask-WTF 공식 문서를 참조하세요.