我坚信后端和前端之间紧密耦合的异端思想:我希望在生成用户界面时自动使用有关后端的现有隐含知识.例如,如果VARCHAR列的最大值为20个字符,则GUI应自动约束用户在相关表单字段中键入超过20个字符.
我对想要定义我的数据库表的ORM有强烈的反感,或者基于某些hack,因为ORM,每个表都需要有额外的数字ID列.
我已经看了一下Python数据库框架,我想我可以断定SQLAlchemy最适合我的心态.
现在,我需要找到一个自然适合SQLAlchemy(或同等版本)的Web应用程序框架,甚至可能还有我对耦合的兴趣.使用"Web应用程序框架",我的意思是产品/项目,如Pyhons,Django,TurboGears,web2py等.
例如,它理想情况下应该能够:
如果被告知,则自动为进入给定列的数据选择合适的表单窗口小部件 ; 例如,如果列具有10个不同值的列的外键,则窗口小部件应显示10个可能的值作为下拉列表
自动生成javascript表单验证代码,如果字符串输入到即将在INTEGER列中结束的字段等,则会为最终用户提供快速错误反馈
自动生成数据的日历小部件,该小部件将在DATE列中结束
提示NOT NULL约束作为javascript,它抱怨相关输入字段中的空或仅空白数据
生成匹配相关(简单)CHECK约束的 javascript验证代码
通过使用预准备语句和/或外部派生数据的验证,可以轻松避免SQL注入
通过在适当时自动转义传出字符串,可以轻松避免跨站点脚本
如果违反了约束,则使用约束名称生成一些用户友好的错误消息
所有这些都应该动态发生,因此表调整会自动反映在前端 - 可能是使用缓存机制,因此所有模型内省都不会扼杀性能.换句话说,我不想在我的数据库中仔细定义XML文件(或类似文件)中重复我的模型定义.
是否存在Python(或任何语言)的框架?如果不是:如果我自己添加部分上述功能,那么几个Python Web应用程序框架中哪一个最不会受到影响?
web2py可以满足您的大部分需求:
基于字段类型及其验证器,它将使用适当的小部件呈现字段.你可以覆盖
db.table.field.widget=...
并使用第三方小部件.
web2py有js阻止用户在整数字段中输入非整数或在双字段中输入非double.时间,日期和日期时间字段有自己的选择器.这些js验证与(而非代替)服务器端验证一起工作.
有IS_EMPTY_OR(...)
验证器.
DAL可以防止SQL注入,因为当进入数据库时,转发会被转义.
web2py会阻止XSS,因为在{{= variable}}中,'variable'会被转义,除非另有说明{{= XML(variable)}}或{{= XML(variable,sanitize = True)}}
例如,错误消息是验证器的参数
db.table.field.requires=IS_NOT_EMPTY(error_message=T('hey! write something in here'))
T代表国际化.