проверка данных для декларативных моделей SQLAlchemy

Я использую шаблоны CherryPy, Mako и SQLAlchemy в веб-приложении. Я исхожу из фона Ruby on Rails и пытаюсь настроить проверку данных для своих моделей. Я не могу найти лучший способ гарантировать, что, скажем, поле «имя» имеет значение, когда какое-то другое поле имеет значение. Я пытался использовать SAValidation, но это позволяло мне создавать новые строки там, где обязательный столбец был пуст, даже когда я использовал validates_presence_of в столбец. Я просматривал WTForms, но, похоже, он содержит много дублированного кода — у меня уже настроен класс модели с столбцы в таблице, почему мне нужно снова повторять все эти столбцы, чтобы сказать: «Эй, этому нужно значение»? Я исхожу из мышления "тощий контроллер, толстая модель" и имею искал методы, подобные Rails, в моей модели, такие как validates_presence_of или validates_length_of. Как я должен проверять данные, которые получает моя модель, и обеспечивать сбой Session.add/Session.merge при сбое проверки?


person Sarah Vessels    schedule 20.06.2011    source источник


Ответы (3)


Ознакомьтесь с документацией по добавлению методов проверки. . Вы можете просто добавить метод «обновления», который принимает POST-словарь, проверяет наличие необходимых ключей и использует декорированные валидаторы для установки значений (выдавая ошибку, если что-то не так).

person BenTrofatter    schedule 20.06.2011
comment
Методы проверки работают только для одного поля за раз. Он, очевидно, имеет в виду проверку, которая зависит от отношений между полями. - person Pedro Werneck; 30.10.2013
comment
Работает с несколькими полями: (а) перечислите все поля, которые вы хотите проверить, в декораторе @validates('validates_presence_of', 'validates_length_of') (б) убедитесь, что ваша проверка срабатывает для последнего объявленного поля в списке полей, чтобы другие поля были уже установлены if key == 'validates_length_of': [code to validate] - person naoko; 13.09.2018

Я написал SAValidation специально для того, чтобы избежать дублирования кода при проверке данных модели. Это хорошо работает для нас, по крайней мере, для наших случаев использования.

В наших тестах у нас есть примеры настройки модели и тесты, чтобы показать работу проверки.

person Randy Syring    schedule 14.12.2011

В конце концов, я использовал WTForms.

person Sarah Vessels    schedule 01.07.2011
comment
Как вы обошли дублирование кода? Можете ли вы немного объяснить, как вы его используете? Я тоже разработчик рельсов, но хочу разработать приложение с помощью flask + sqlalchemy... Я видел WTForms, но мне это кажется немного чуждым, поскольку вы всегда сохраняете проверку в представлении... пока оно кажется более достоверным (и более сухим) для хранения его в модели. - person jbwiv; 25.07.2011