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 еще более удобной и эффективной.