Flask와 폼 처리 기법 Flask-WTF 사용하기
Flask는 Python으로 웹 애플리케이션을 구축할 때 간단하고 강력한 도구를 제공합니다. 특히, 사용자 입력을 처리하기 위해 폼(form)을 다루는 것이 중요합니다. Flask-WTF는 Flask에서 폼을 쉽게 처리할 수 있도록 돕는 확장 패키지로, 강력한 기능과 간결한 코드를 제공합니다. 이번 포스팅에서는 Flask-WTF를 사용하여 폼을 처리하는 방법을 예제와 함께 알아보겠습니다.
Flask-WTF란?
Flask-WTF는 Flask 애플리케이션에서 WTForms를 쉽게 사용할 수 있도록 통합한 확장 기능입니다. 이 라이브러리는 다음과 같은 기능을 제공합니다:
- 폼 생성 및 검증
- CSRF 보호
- HTML 렌더링을 위한 편리한 헬퍼
Flask-WTF 설치하기
먼저 Flask-WTF를 설치해야 합니다. 아래 명령어를 실행하여 패키지를 설치하세요.
pip install flask-wtf
기본 설정
1. Flask 애플리케이션 생성
Flask 애플리케이션을 생성하고 Flask-WTF를 설정합니다. CSRF 보호를 위해 비밀 키를 설정해야 합니다.
from flask import Flask, render_template, redirect, url_for, flash
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, Email
app = Flask(__name__)
app.secret_key = 'your_secret_key_here' # CSRF 보호를 위한 비밀 키
2. 폼 클래스 정의
WTForms를 사용하여 폼 클래스를 정의합니다. 사용자가 입력할 필드와 검증 로직을 지정할 수 있습니다.
class LoginForm(FlaskForm):
email = StringField('이메일', validators=[DataRequired(), Email(), Length(max=50)])
password = PasswordField('비밀번호', validators=[DataRequired(), Length(min=6, max=20)])
submit = SubmitField('로그인')
폼 처리 로직 구현
Flask 라우트에서 폼을 처리하는 과정을 구현합니다.
@app.route('/', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
email = form.email.data
password = form.password.data
# 여기서 입력된 데이터를 사용하여 인증 로직 추가 가능
flash(f'{email}님, 로그인 성공!', 'success')
return redirect(url_for('login'))
return render_template('login.html', form=form)
HTML 템플릿 작성
Flask-WTF는 form.hidden_tag()
메서드를 통해 CSRF 토큰을 추가하고, 각 필드를 쉽게 렌더링할 수 있도록 지원합니다.
login.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() }}
<div>
{{ form.email.label }}
{{ form.email }}
{% for error in form.email.errors %}
<span style="color: red;">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form.password.label }}
{{ form.password }}
{% for error in form.password.errors %}
<span style="color: red;">{{ error }}</span>
{% endfor %}
</div>
<div>
{{ form.submit }}
</div>
</form>
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
<p class="{{ category }}">{{ message }}</p>
{% endfor %}
{% endif %}
{% endwith %}
</body>
</html>
실행 결과
Flask 서버를 실행하면 /
경로에서 로그인 폼이 표시됩니다. 폼을 제출하면 입력 검증이 수행되고, 유효한 입력이 제공되었을 경우 성공 메시지가 표시됩니다.
결론
Flask-WTF를 사용하면 폼을 처리하는 작업이 매우 간단해집니다. 특히 CSRF 보호, 폼 검증, 오류 메시지 처리 등 많은 기능을 제공하므로 생산성을 크게 높일 수 있습니다. 앞으로 더 복잡한 폼과 기능을 구현할 때도 Flask-WTF를 활용해보세요!
'Python Flask' 카테고리의 다른 글
Flask에서 폼 처리와 파일 업로드 기능 구현하기 (0) | 2025.01.29 |
---|---|
Flask와 폼 처리 기법 폼 유효성 검사 및 사용자 입력 처리 (0) | 2025.01.28 |
Flask 데이터베이스 마이그레이션 관리 (0) | 2025.01.26 |
Flask SQLAlchemy 소개 및 사용법 (0) | 2025.01.25 |
Flask와 SQLite 연결하기 (0) | 2025.01.24 |