我坚信后端和前端之间紧密耦合的异端思想:我希望在生成用户界面时自动使用有关后端的现有隐含知识。例如,如果 VARCHAR 列最多包含 20 个字符,则 GUI 应自动限制用户在相关表单字段中键入超过 20 个字符。
我非常反感 ORM,因为 ORM 想要定义我的数据库表,或者基于一些黑客攻击,其中每个表都需要有额外的数字 ID 列,因为 ORM。
我研究了一些 Python 数据库框架,我想我可以得出结论,SQLAlchemy 最适合我的想法。
现在,我需要找到一个 web 应用程序框架,它自然适合 SQLAlchemy(或等效的),甚至可能符合我对耦合的胃口。对于“Web 应用程序框架”,我指的是 Pyhons、Django、TurboGears、web2py 等产品/项目。
例如,理想情况下它应该能够:
- 自动为输入给定列的数据选择合适的表单小部件(如果被告知这样做);例如,如果该列的外键指向具有 10 个不同值的列,则小部件应将 10 个可能的值显示为下拉列表
- 自动生成 javascript 表单验证代码,如果将字符串输入到即将在 INTEGER 列中结束的字段等,它会为最终用户提供快速错误反馈
- 为将在 DATE 列中结束的数据自动生成一个日历小部件
- 提示 NOT NULL 约束 as javascript 提示相关输入字段中的空数据或仅空白数据
- 生成匹配相关(简单)CHECK-constraints 的 javascript 验证代码
- 通过使用准备好的语句和/或验证外部派生数据,轻松避免 SQL 注入(inject)
- 通过在适当的时候自动转义传出字符串,轻松避免跨站点脚本
- 利用约束名称在违反约束的情况下生成对用户友好的错误消息
所有这些都应该动态发生,因此表调整会自动反射(reflect)在前端 - 可能使用缓存机制,以便所有模型自省(introspection)都不会降低性能。换句话说,我不想在 XML 文件(或类似文件)中重复我的模型定义,因为它已经在我的数据库中仔细定义过。
是否存在适用于 Python(或任何其他语言)的框架?如果不是:如果我自己添加上述部分功能,那么几种 Python Web 应用程序框架中的哪一种最不碍事?
最佳答案
web2py 完成了您所要求的大部分工作:
基于字段类型及其验证器,它将使用适当的小部件呈现该字段。您可以覆盖
db.table.field.widget=...
并使用第三方小部件。
web2py 有 js 来阻止用户在整数字段中输入非整数或在 double 字段中输入非 double 。时间、日期和日期时间字段有自己的选择器。这些 js 验证与(而不是)服务器端验证一起工作。
有 IS_EMPTY_OR(...)
验证器。
DAL 可防止 SQL 注入(inject),因为进入数据库时所有内容都会被转义。
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 代表国际化。
关于python - 用于紧密 DB/GUI 耦合的 python Web 应用程序框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43368/