Web2py - 组件

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

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

web2py 包含一个称为 LOAD 函数的函数,该函数使组件的实现变得容易,无需显式 JavaScript 或 AJAX 编程。

考虑一个简单的 Web 应用程序,即"test",它使用文件"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)}}

For example, the Controllers can be edited as −

def index():
   return dict()

In View, we can add the component −

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

可以通过URL访问该页面 − http://127.0.0.1:8000/test/default/index

组件插件

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

如上例所述,可以在 Models 部分中将评论组件添加到 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)