Web2py - 组件



组件定义为网页的独立功能部分,可以自主运行。它可以由嵌入网页的模块、控制器和视图组成。应用程序中的组件必须是本地化的标签,并且其性能被认为与模块无关。

在 web2py 中,主要关注的是使用加载到页面中并通过 AJAX 与组件控制器通信的组件。

web2py 包含一个名为 **LOAD** 的函数,它使得无需显式 JavaScript 或 AJAX 编程即可轻松实现组件。

考虑一个名为“**test**”的简单 web 应用程序,它使用“**models/db_comments.py**”文件中的自定义模型扩展了 web2py 应用程序。

db.define_table(
   'comment_post', Field('body','text',
   label = 'Your comment'),auth.signature
)

上述代码将创建一个名为“**comment_post**”的表,并具有正确的表定义。该操作将借助“**controllers/comments.py**”中的函数实现。

def post():
   return dict(
      form = SQLFORM(db.comment_post).process(),
      comments = db(db.comment_post).select()
   )

相应的视图将显示为:

{{extend 'layout.html'}}
{{for post in comments:}}

<div class = "post">
   On {{= post.created_on}} {{= post.created_by.first_name}}
   says <span class = "post_body">{{= post.body}}</span>
</div>

{{pass}}
{{= form}}

可以使用以下 URL 访问页面:**http://127.0.0.1:8000/test/comments/post**

上述方法是访问视图的传统方法,可以通过实现 LOAD 函数来更改。

这可以通过创建一个扩展名为 **".load"** 的新视图来实现,该视图不扩展布局。

创建的新视图将是 **"views/comments/post.load"**:

<div class = "post">
   On {{= post.created_on}} {{= post.created_by.first_name}}
   says <blockquote class = "post_body">{{= post.body}}</blockquote>
</div>

{{pass}}
{{= form}}

访问页面的 URL 将是:**http://127.0.0.1:8000/test/comments/post.load**

LOAD 组件可以嵌入到 web2py 应用程序的任何其他页面中。这可以通过使用以下语句来完成。

{{= LOAD('comments','post.load',ajax = True)}}

例如,可以编辑 **控制器** 为:

def index():
   return dict()

在 **视图** 中,我们可以添加组件:

{{extend 'layout.html'}}
{{= LOAD('comments','post.load',ajax = True)}}

可以使用以下 URL 访问页面:**http://127.0.0.1:8000/test/default/index**

组件插件

组件插件是唯一定义 **组件** 的插件。组件使用其模型定义直接访问数据库。

如前例所示,可以将注释组件添加到 **comments_plugin** 中,这可以在 **模型** 部分完成:

"**models/plugin_comments.py**":

db.define_table(
   'plugin_comments_comment',
   Field('body','text', label = 'Your comment'),
   auth.signature
)

**控制器** 将包含以下插件:

def plugin_comments():
   return LOAD('plugin_comments','post',ajax = True)
广告