一种用于紧密数据库/图形用户界面耦合的Python web应用框架?

11 投票
5 回答
2868 浏览
提问于 2025-04-10 23:41

我坚信后端和前端之间应该紧密结合:我希望在生成用户界面时,能够自动利用已有的后端知识。比如,如果一个VARCHAR列的最大长度是20个字符,那么相关的表单字段应该自动限制用户输入超过20个字符。

我对那些想要定义我数据库表的ORM(对象关系映射)工具非常反感,或者那些因为ORM而需要每个表都有额外数字ID列的黑科技。

我稍微研究了一下Python的数据库框架,觉得SQLAlchemy最符合我的想法。

现在,我需要找一个与SQLAlchemy(或类似工具)自然契合的web应用框架,可能还要符合我对紧密结合的需求。这里的“web应用框架”指的是像Django、TurboGears、web2py等这样的产品或项目。

例如,它理想情况下应该能够:

  • 自动选择合适的表单控件,用于输入特定列的数据;比如,如果某列有一个外键指向一个有10个不同值的列,那么控件应该显示这10个可能的值作为下拉菜单。
  • 自动生成JavaScript表单验证代码,这样用户在输入一个字符串到即将存入INTEGER列的字段时,可以快速收到错误反馈。
  • 自动生成一个日历控件,用于输入将存入DATE列的数据。
  • 提示NOT NULL约束,通过JavaScript检查相关输入字段是否为空或只包含空格。
  • 生成与相关的(简单)CHECK约束匹配的JavaScript验证代码。
  • 方便避免SQL注入,通过使用预处理语句和/或验证外部数据。
  • 方便避免跨站脚本攻击,在适当的时候自动转义输出字符串。
  • 利用约束名称生成用户友好的错误信息,以便在违反约束时显示。

所有这些都应该是动态发生的,因此表的调整会自动反映在前端——可能还需要一个缓存机制,以免所有的模型反射影响性能。换句话说,我不想在XML文件(或类似文件)中重复定义我的模型,因为它已经在数据库中仔细定义过了。

有没有这样的框架存在于Python(或其他语言)中?如果没有:在众多Python web应用框架中,哪个框架在我自己添加上述功能时会最不受阻碍?

5 个回答

1

我觉得Django的模型不支持复合主键(可以查看文档)。不过,也许你可以在Django中使用SQLAlchemy?通过谷歌搜索,似乎是可以的。我没有用过Django,所以不太清楚。

我建议你看看:

我对以上项目没有深入的了解。我只是想在自己的一个应用中添加一些类似于原问题提到的功能。上面的列表只是我偶然发现的一些有趣项目。

至于Python的网页应用框架,我推荐TurboGears 2。并不是说我对其他框架有经验,只是我比较喜欢TurboGears...

如果原问题的作者找到一个有效的解决方案,请更新或回复这个讨论。

3

你可以看看Django,特别是它的新表单模块管理模块。新表单模块提供了一个很好的功能,可以在服务器端进行验证,并自动生成错误信息或页面给用户。添加ajax验证也是可以实现的

5

web2py可以满足你大部分的需求:

根据字段的类型和验证规则,它会用合适的控件来显示这个字段。你也可以通过

db.table.field.widget=...

来使用第三方的控件。

web2py有一些JavaScript代码,可以阻止用户在整数字段中输入非整数的值,或者在双精度字段中输入非双精度的值。时间、日期和日期时间字段都有自己的选择器。这些JavaScript验证是和服务器端验证一起工作的,而不是替代它。

还有一个叫做 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是为了国际化。

撰写回答