Category/Flask
flask-wtf란?
Corinee
2024. 9. 19. 23:13
728x90
Flask-WTF는 Flask 웹 애플리케이션에서 웹 폼 처리를 간편하게 할 수 있도록 돕는 확장 패키지입니다. Flask-WTF는 WTForms 라이브러리와 Flask를 통합하여 폼 생성, 폼 검증, 그리고 보안 기능(예: CSRF 보호)을 쉽게 관리할 수 있게 해줍니다.
주요 기능:
- 폼 생성 및 관리: Flask-WTF는 WTForms를 기반으로 하여 다양한 HTML 폼 요소(텍스트 입력, 비밀번호 입력, 체크박스 등)를 Python 클래스와 필드로 쉽게 정의할 수 있게 해줍니다.
- 폼 검증: 사용자로부터 입력된 데이터를 쉽게 검증할 수 있도록 여러 유효성 검사기(validator)를 제공합니다. 예를 들어, 필수 입력값, 이메일 형식, 최소/최대 글자 수 등을 쉽게 설정할 수 있습니다.
- CSRF 보호: Flask-WTF는 CSRF (Cross-Site Request Forgery) 공격을 방지하는 기능을 기본 제공하여, 폼을 사용할 때 자동으로 보안 토큰을 생성하고 검증합니다.
- 폼 렌더링: Flask-WTF는 WTForms의 기능을 확장하여 Flask의 템플릿 엔진(Jinja2)과 쉽게 통합되어, HTML 템플릿에서 폼을 쉽게 렌더링하고 처리할 수 있습니다.
Flask-WTF 사용 예시:
1. 폼 클래스 정의:
from flask_wtf import FlaskForm
from wtforms import StringField, TextAreaField, SubmitField
from wtforms.validators import DataRequired, Length
class QuestionForm(FlaskForm):
subject = StringField('제목', validators=[DataRequired(), Length(min=1, max=200)])
content = TextAreaField('내용', validators=[DataRequired()])
submit = SubmitField('제출')
여기서는 FlaskForm을 상속받은 폼 클래스를 정의합니다. subject 필드와 content 필드가 있고, 각 필드에 유효성 검사를 추가할 수 있습니다. 예를 들어, DataRequired()는 필수 입력값을 요구하고, Length()는 입력 문자열의 길이를 제한합니다.
2. 폼을 템플릿에서 사용하기:
<form method="POST" action="">
{{ form.hidden_tag() }} <!-- CSRF 보호를 위한 숨겨진 태그 -->
<div>
{{ form.subject.label }} <!-- 필드 라벨 -->
{{ form.subject(size=50) }} <!-- 폼 필드 -->
{% if form.subject.errors %}
<ul>
{% for error in form.subject.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
<div>
{{ form.content.label }}
{{ form.content(rows=10) }}
{% if form.content.errors %}
<ul>
{% for error in form.content.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
<div>
{{ form.submit() }} <!-- 제출 버튼 -->
</div>
</form>
이 코드는 Flask 템플릿에서 폼을 렌더링하는 방법을 보여줍니다. 각 필드와 유효성 검사 오류를 처리하는 부분을 포함하여 쉽게 폼을 관리할 수 있습니다.
3. CSRF 보호:
Flask-WTF는 기본적으로 CSRF 보호를 위해 폼에 CSRF 토큰을 포함시키며, 이를 통해 폼이 외부에서 조작되는 것을 방지할 수 있습니다.
4. 폼 데이터를 처리하기:
from flask import Flask, render_template, redirect, url_for, flash
from forms import QuestionForm # 폼 클래스
app = Flask(__name__)
app.secret_key = 'your_secret_key' # CSRF 보호를 위해 필요
@app.route('/submit', methods=['GET', 'POST'])
def submit():
form = QuestionForm()
if form.validate_on_submit():
# 폼 데이터 처리 (예: DB에 저장)
flash('질문이 성공적으로 제출되었습니다.')
return redirect(url_for('index'))
return render_template('submit.html', form=form)
위 코드는 폼을 처리하는 기본적인 방식입니다. validate_on_submit()는 폼이 제출되었는지와 유효성 검사를 통과했는지를 확인합니다.
결론:
Flask-WTF는 Flask 애플리케이션에서 웹 폼을 쉽게 처리하고 보안성을 높이는 데 필수적인 도구입니다. 폼 생성, 검증, CSRF 보호를 단순화하여 개발자의 작업을 크게 줄여줍니다.
728x90