Python и flask — это мощные инструменты для создания веб-приложений. wtforms — это библиотека, которая облегчает создание и валидацию веб-форм в flask. В статье мы узнаем, как использовать wtforms для представления данных модели sqlalchemy в виде формы.

Установка и настройка

Для начала работы с wtforms в flask, необходимо установить его с помощью pip:

pip install WTForms

После установки wtforms нужно импортировать в вашем приложении flask:

javascript

from flask_wtf import FlaskForm

from wtforms import StringField, SubmitField

Создание формы

Для создания формы с wtforms, необходимо создать класс, который наследуется от FlaskForm. затем определить поля, которые вы хотите включить в форму. Например:

scss

class MyForm(FlaskForm):

name = StringField('Name')

email = StringField('Email')

submit = SubmitField('Submit')

В этом примере мы создали форму с двумя полями (имя и электронная почта) и кнопкой отправки. Каждое поле представляет собой экземпляр класса StringField.

Представление данных модели sqlalchemy в форме

Чтобы представить данные модели sqlalchemy в форме, можно использовать wtforms.ext.sqlalchemy.queryselectfield. Это даёт выбирать данные из модели и представлять их в виде выпадающего списка или радиокнопок. например:

python

from wtforms.ext.sqlalchemy.fields import QuerySelectField

from models import User

class MyForm(FlaskForm):

user = QuerySelectField('User', query_factory=lambda: User.query.all())

submit = SubmitField('Submit')

В данном примере мы разработали форму, дающую пользователю выбрать одного из пользователей из базы данных.

Валидация данных

Wtforms также обеспечивает простую валидацию данных. например, вы можете добавить проверку на пустое поле, адрес электронной почты и т. д. к полям вашей формы:

scss

from wtforms.validators import DataRequired, Email

class MyForm(FlaskForm):

name = StringField('Name', validators=[DataRequired()])

email = StringField('Email', validators=[DataRequired(), Email()])

submit = SubmitField('Submit')

В приведенном примере мы добавили валидаторы к полям имени и электронной почты, чтобы гарантировать, что пользователь введет данные в эти поля, а также чтобы убедиться, что электронная почта соответствует правильному формату.

Работа с формой во flask

для работы с формой в приложении flask, необходимо рендерить ее в шаблоне html и обрабатывать данные, отправленные пользователем. например:

python

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/form', methods=['GET', 'POST'])

def form():

form = MyForm()

if form.validate_on_submit():

# Обработка данных формы

return 'Form submitted successfully!'

return render_template('form.html', form=form)

В представленном примере мы определили маршрут /form, который отображает форму на веб-странице. После отправки данных они проходят проверку на валидность. Если данные прошли проверку успешно, мы можем выполнить нужные действия.

Кастомизация формы и полей

WTForms также предоставляет возможность кастомизировать формы и их поля. Это даёт настроить внешний вид и поведение формы в соответствии с требованиями проекта. Например, можно изменить метки полей, добавить placeholder’ы или установить классы CSS для стилизации. Пример:

python

class MyForm(FlaskForm):

name = StringField('Full Name', render_kw={"placeholder": "Enter your full name", "class": "form-control"})

email = StringField('Email Address', render_kw={"placeholder": "Enter your email address", "class": "form-control"})

submit = SubmitField('Submit', render_kw={"class": "btn btn-primary"})

В этом примере мы добавили placeholder’ы и классы CSS для стилизации полей и кнопки отправки формы.

Расширение возможностей с WTForms

WTForms предоставляет различные расширения, которые можно использовать для улучшения функциональности форм. Например, WTForms-Alchemy даёт автоматически создавать формы из моделей SQLAlchemy, что существенно упрощает создание форм. Это особенно полезно при работе с большим количеством полей и моделей данных. Пример использования WTForms-Alchemy:

python

from flask_wtf import FlaskForm

from wtforms_alchemy import model_form_factory

from models import User

from wtforms_alchemy.fields import QuerySelectField

BaseModelForm = model_form_factory(FlaskForm)

class UserForm(BaseModelForm):

class Meta:

model = User

class MyForm(FlaskForm):

user = QuerySelectField('User', query_factory=lambda: User.query.all())

submit = SubmitField('Submit')

В этом примере мы создали форму UserForm, автоматически сгенерированную из модели данных User с использованием WTForms-Alchemy.

Заключение

Wtforms — это мощная библиотека для работы с веб-формами в flask. с ее помощью можно легко создавать, представлять и валидировать данные модели sqlalchemy в виде формы. Это делает разработку веб-приложений на python еще более удобной и эффективной.