Я твердо верю еретичной мысли о плотной связи между бэкэнд и интерфейсом: я хочу, чтобы существующие, подразумеваемые знания о бэкэнд автоматически использовались при создании пользовательских интерфейсов. Например, если столбец VARCHAR имеет максимум 20 символов, то GUI должны автоматически ограничивать пользователя от ввода более 20 символов в соответствующем поле формы.
И у меня есть сильная антипатия к ORM, которые хотят определить мои таблицы базы данных или основаны на некоторых хаках, где каждая таблица должна иметь дополнительные столбцы числового идентификатора из-за ORM.
Я немного взглянул на фреймворки базы данных Python, и я думаю, что я могу завершить SQLAlchemy, наиболее подходящий для моей ментальности.
Теперь мне нужно найти структуру веб-приложения, которая естественно подходит для SQLAlchemy (или эквивалента) и, возможно, даже с моим аппетитом к соединению. С "инфраструктурой веб-приложений" я имею в виду продукты/проекты, такие как Pyhons, Django, TurboGears, web2py и т.д.
Например, он должен идеально иметь возможность:
- автоматически выберите подходящий виджет формы для ввода данных в указанный столбец, если ему это сказали; например, если столбец имеет внешний ключ для столбца с 10 различными значениями, виджет должен отображать 10 возможных значений в качестве раскрывающегося списка
- автоматически создать код проверки формы JavaScript, который дает обратную связь с быстрой ошибкой конечного пользователя, если строка вводится в поле, которое должно закончиться в столбце INTEGER, и т.д.
- автоматически создайте виджет календаря для данных, которые будут в столбце DATE
- намекнуть NOT NULL ограничения как javascript, который жалуется на пустые или пробельные данные в соответствующем поле ввода
- создать код проверки JavaScript, который соответствует соответствующим (простым) ограничениям CHECK
- упростить избежать SQL-инъекций, используя подготовленные операторы и/или проверку внешних данных
- упростить избежать межсайтового скриптинга, автоматически удаляя исходящие строки, когда это необходимо
- использовать имена ограничений, чтобы генерировать несколько удобных сообщений об ошибках в случае нарушения constrataint.
Все это должно происходить динамически, поэтому настройки таблицы автоматически отражаются на интерфейсе - возможно, с механизмом кэширования, так что вся интроспекция модели не будет убивать производительность. Другими словами, я не хочу повторять свое определение модели в файле XML (или аналогично), когда он уже был тщательно определен в моей базе данных.
Существует ли такая основа для Python (или для любого языка, если на то пошло)? Если нет: какая из нескольких фреймворков веб-приложений Python будет наименее мерой, если я должен сам добавить части этих функций?