Я оцениваю некоторые фреймворки веб-приложений, и, наконец, два из крупнейших претендентов (на мой взгляд) - это Ruby on Rails и Pylons. Чтобы лучше понять две платформы, не тратя слишком много времени, я решил следовать нетривиальному руководству по приложениям для одной платформы и попытаться повторить то же самое для другой. Я надеюсь, что это упражнение высветит очевидные различия.
Для моего эксперимента я выбрал Ruby on Rails Tutorial . Я закончил приложение в Rails, и теперь я начал делать это в Pylons. Я дошел до главы 6 без особой драмы (учитывая, что до этого момента это в основном статические страницы, это неудивительно). Теперь мне нужно реализовать модель для пользователей и добавить логику проверки в модель. Первая часть проста, но я застрял на второй части.
Из того, что я вижу, Pylons применяет подход к проверке на уровне формы. Проводя некоторые исследования, я видел, что многие люди полагают, что точка, в которой вы принимаете ввод формы, является правильным местом для проверки ввода. Я также прошел через множество проектов пилонов на github, и мне не удалось найти ни одного проекта, который бы обрабатывал данные на уровне модели. Самое близкое, что я видел, было то, где разработчики хранили свои формы вместе с данными на уровне модели, но, на мой взгляд, это обман. Я не возражаю против того, чтобы следовать руководству к письму и следовать за толпой, но я согласен с этим руководством. Для рассматриваемой модели проверки выполняются в нужном месте: проверка длины пароля, длины имени пользователя и проверка того, что электронная почта на самом деле является электронной почтой, все считают ограничениями на уровне модели. Кроме того, если у меня будет хотя бы две формы, которые будут добавлять данные в эту модель (создание нового пользователя и изменение информации), и повторение одной и той же проверки в двух разных формах не будет правильным.
Короче говоря (выделено для TLDR): есть ли инфраструктура, которую я могу использовать, которая связывает формы с моделями более плотно, чем предлагаемая пара SQLAlchemy / formencode? С этими Во-вторых, лучшее, что я могу сделать, это добавить утверждения на уровне модели. На самом деле, это неправда, я мог бы попытаться преодолеть этот пробел с помощью пользовательского кода, но он выглядит как ужасно много кода, и его довольно сложно понять. Итак, я подумал, что было бы лучше спросить, прежде чем пытаться расширить код, который я не совсем понимаю.