[python] Flask-WTF에서 사용자가 입력한 값에 대한 서버 측 검증을 어떻게 할 수 있나요?

Flask-WTF는 Flask 웹 프레임워크와 함께 사용되는 WTForms의 확장입니다. Flask-WTF를 사용하여 사용자가 입력한 값에 대한 서버 측 검증을 간편하게 수행할 수 있습니다.

먼저, Flask-WTF를 설치해야 합니다. 아래의 명령어를 사용하여 Flask-WTF를 설치할 수 있습니다.

pip install Flask-WTF

다음은 Flask-WTF를 사용하여 사용자가 입력한 값을 검증하는 간단한 예제입니다.

먼저, Flask-WTF의 Form 클래스를 상속받은 폼 클래스를 생성합니다. 이 폼 클래스에서 입력 필드와 해당 필드에 대한 유효성 검사 규칙을 정의합니다.

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

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

위의 예제에서는 name 필드와 email 필드를 정의하였습니다. validators 매개변수를 사용하여 입력 값에 대한 유효성 검사 규칙을 지정합니다. 여기서는 DataRequiredLength 벨리데이터를 사용하여 필드가 비어 있지 않고, 특정 길이 범위 내에 있는 지를 검증하였습니다.

이제 이 폼을 사용하여 사용자 입력을 검증하는 뷰 함수를 만들어보겠습니다.

from flask import Flask, render_template, flash, redirect, url_for
from forms import MyForm

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

@app.route('/', methods=['GET', 'POST'])
def index():
    form = MyForm()
    if form.validate_on_submit():
        flash('입력이 유효합니다!', 'success')
        return redirect(url_for('index'))
    return render_template('index.html', form=form)

위의 예제에서는 validate_on_submit 메서드를 사용하여 사용자 입력이 유효한 경우에만 ‘입력이 유효합니다!’라는 화면에 플래시 메세지를 표시하고, 그렇지 않은 경우에는 현재 페이지를 유지합니다.

위의 예제에서 render_template 함수를 사용하여 index.html 템플릿을 렌더링하기 위해 index 뷰 함수를 수정해야합니다.

마지막으로, index.html 템플릿 파일에서 폼을 렌더링해보겠습니다.


<!DOCTYPE html>
<html>
<head>
    <title>Flask-WTF Example</title>
</head>
<body>
    <h1>입력 폼 예제</h1>
    
    {% with messages = get_flashed_messages() %}
        {% if messages %}
            <ul class="messages">
                {% for message in messages %}
                    <li>{{ message }}</li>
                {% endfor %}
            </ul>
        {% endif %}
    {% endwith %}
    
    <form method="POST" action="/">
        {{ form.csrf_token }}
        {{ form.name.label }} {{ form.name(size=40) }}
        {{ form.email.label }} {{ form.email(size=40) }}
        {{ form.submit() }}
    </form>
</body>
</html>

위의 예제에서는 get_flashed_messages 함수를 사용하여 플래시 메세지를 렌더링하고, form.csrf_token 필드를 사용하여 CSRF 공격으로부터 보호합니다.

이렇게 Flask-WTF를 사용하여 사용자가 입력한 값에 대한 서버 측 검증을 수행할 수 있습니다. Flask-WTF를 사용하면 복잡한 검증 규칙을 정의하고, 유효성 검사를 통과하지 못한 경우 쉽게 오류 메세지를 표시할 수 있는 장점이 있습니다.

Flask-WTF에 대한 더 자세한 정보는 공식 문서를 참조하시기 바랍니다.