python - 用于紧密 DB/GUI 耦合的 python Web 应用程序框架?

标签 python sql metadata coupling data-driven

我坚信后端和前端之间紧密耦合的异端思想:我希望在生成用户界面时自动使用有关后端的现有隐含知识。例如,如果 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/

相关文章:

python - python 3中pickle和_pickle有什么区别?

python - 删除两个字符之间的所有内容,包括字符

sql - 在 SQL 中格式化表结果

c# - 引用 dll 路径的区域内的此注释的目的是什么? (系统. Action )

clojure - 如何从 clj 宏访问编译时 cljs var 元数据?

python - 将 GET 请求中的 URL 发送到 Google App Engine 上的 Python 服务器

python - 计算每个字母在文本样本中出现的次数

sql - 微软 SQL : Should ISDATE() Return "1" when Cannot Cast as Date?

php - 发送自动电子邮件

c# - IPTC .NET 读/写 C# 库