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

Pyramid은 파이썬 웹 프레임워크로, 다양한 기능을 제공하며 손쉽게 웹 애플리케이션을 개발할 수 있습니다. 이 중에서도 폼 처리는 웹 애플리케이션에서 매우 중요한 부분입니다. 이번 블로그 포스트에서는 Pyramid에서의 폼 처리에 대해 알아보겠습니다.

폼 생성하기

Pyramid에서는 폼을 생성하기 위해 deform 라이브러리를 자주 사용합니다. deform은 폼 생성을 단순화하고 유효성 검사 등의 기능을 제공하는 유용한 라이브러리입니다.

먼저, deform을 설치해보겠습니다. 다음 명령어를 사용하면 됩니다:

pip install deform

폼을 생성하기 위해서는 먼저 Colander 스키마 클래스를 정의해야 합니다. 스키마 클래스는 폼 필드와 해당 필드의 유효성 검사 규칙을 정의합니다. 예를 들면 다음과 같습니다:

import colander

class MyFormSchema(colander.MappingSchema):
    name = colander.SchemaNode(colander.String(),
                               validator=colander.Length(min=5, max=30),
                               widget=deform.widget.TextInputWidget())
    email = colander.SchemaNode(colander.String(),
                                validator=colander.Email(),
                                widget=deform.widget.TextInputWidget(type='email'))

위의 코드에서 name 필드는 문자열 타입으로, 길이는 5에서 30 사이여야 합니다. email 필드는 이메일 형식이어야 합니다. widget 속성을 사용하여 필드에 대한 UI 위젯을 지정할 수 있습니다.

뷰에서 폼 처리하기

폼을 생성한 후, 이를 실제로 처리하는 뷰를 작성해야 합니다. Pyramid에서는 pyramid_deform 패키지를 사용하여 이를 수행할 수 있습니다. 다음과 같이 패키지를 설치합니다:

pip install pyramid_deform

뷰에서는 폼 데이터를 처리하고 유효성을 검사하는 로직을 작성해야 합니다. 이를 위해서는 deform.Form 클래스를 사용합니다. 다음은 간단한 폼 처리 뷰의 예시입니다:

from pyramid.view import view_config
from pyramid_deform import Form

@view_config(route_name='my_form', renderer='my_form.html')
def my_form_view(request):
    schema = MyFormSchema()
    form = Form(schema, buttons=('submit',))

    if request.method == 'POST':
        controls = request.POST.items()
        try:
            appstruct = form.validate(controls)
            # 폼 처리 로직
        except deform.ValidationFailure as e:
            return {'form': e.render()}
    else:
        return {'form': form.render()}

위의 코드에서 my_form_view 함수를 view_config로 데코레이트하여 해당 경로로의 요청을 처리할 수 있습니다. 폼과 스키마를 생성한 후, Form 클래스를 사용하여 폼을 생성합니다. POST 요청인 경우에는 폼 데이터의 유효성을 검사하고 처리하는 로직을 수행합니다.

폼 템플릿 작성하기

마지막으로, 폼을 렌더링하는 템플릿을 작성해야 합니다. deform은 별도의 템플릿 엔진을 필요로 하지 않으며 Pyramid의 기본 템플릿 엔진인 Jinja2와 같이 사용할 수 있습니다. 다음은 간단한 템플릿 예시입니다:


<!DOCTYPE html>
<html>
<head>
    <title>My Form</title>
</head>
<body>
    <h1>My Form</h1>
    <form method="POST" action="">
        {{ form | safe }}
    </form>
</body>
</html>

이 템플릿은 form 변수를 받아와 해당 내용을 출력합니다.

결론

Pyramid에서의 폼 처리는 deform 라이브러리를 사용하여 단순화됩니다. 폼 생성, 폼 처리 뷰 작성, 그리고 템플릿 작성의 단계를 거쳐 폼을 손쉽게 처리할 수 있습니다. 이를 통해 웹 애플리케이션의 사용자 입력 처리를 간단하게 구현할 수 있습니다.