Ответ
Для автоматической генерации и валидации форм на основе моделей SQLAlchemy используется библиотека WTForms в связке с расширением WTForms-Alchemy.
Этот подход, аналогичный ModelForm в Django, позволяет:
- Уменьшить количество шаблонного кода.
- Автоматически создавать поля формы, соответствующие полям модели.
- Использовать валидаторы, определенные в модели (например,
nullable=False).
Пример реализации
-
Определение модели SQLAlchemy:
# models.py from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50), nullable=False) email = Column(String(120), unique=True, nullable=False) -
Создание формы с помощью
ModelForm:# forms.py from wtforms_alchemy import ModelForm from models import User class UserForm(ModelForm): class Meta: model = User -
Рендеринг в шаблоне (например, Jinja2):
<form method="post"> {{ form.csrf_token }} <!-- Для защиты от CSRF, если настроено --> <div class="form-group"> {{ form.name.label }} {{ form.name(class_='form-control') }} </div> <div class="form-group"> {{ form.email.label }} {{ form.email(class_='form-control') }} </div> <button type="submit" class="btn btn-primary">Сохранить</button> </form>
Таким образом, WTForms-Alchemy берет на себя всю рутинную работу по созданию полей и их базовой валидации, оставляя разработчику только логику обработки данных.