"高级特性-三零卫士工业防火墙系统技术白皮书"
本文主要讨论了Web2py框架中的高级特性,包括表继承和公共字段与多分租策略,这些都是在构建复杂应用时非常有用的特性。
6.29 表继承(Table Inheritance)
在Web2py中,表继承允许你创建一个新的表,该表包含另一个表的所有字段。这种机制有助于减少代码重复和提高代码组织性。例如,你可以定义一个基础表`person`,然后创建一个继承自`person`的`doctor`表,同时添加新的字段`specialization`。表继承的一个关键点是,如果继承的表包含验证器,确保在定义子表之前先定义父表的验证器。
6.29.2 公共字段(Common Fields)和多分租(Multi-tenancy)
Web2py提供了一个名为`db.common.fields`的列表,用于存放所有表通用的字段。这些字段可以是其他表的引用,比如认证信息。通过在`db.define_tables()`之后添加`auth.signature`到`db._common_fields`,可以将认证签名字段添加到所有表中。`request_tenant`字段是特殊的,尽管它不存在,但可以通过添加到`db._common_fields`来创建,用于实现多分租功能。这意味着根据请求的域名,所有查询会自动过滤出对应的数据。这使得一个应用实例和单一数据库可以服务于多个域名,每个域名展示的数据独立。
在上述例子中,`default = request.env.http_host`设置意味着每个表的`request_tenant`字段将自动设置为请求的主机名,从而根据域名过滤数据。这样,一个运行在不同域名下的Web商店应用,可以共享同一个程序和数据库,而每个域名的用户看到的是与其域名对应的数据。
总结来说,Web2py的高级特性如表继承和多分租,提供了强大的数据管理和应用程序扩展能力。表继承简化了数据结构的维护,公共字段和多分租则让处理多个独立租户的数据隔离变得简单易行。这些特性使得Web2py成为构建大型、复杂Web应用的理想选择。