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)}}
例如,控制器可以编辑为 -
def index(): return dict()
在View中,我们可以添加组件 -
{{extend 'layout.html'}} {{= LOAD('comments','post.load',ajax = True)}}
可以通过 URL 访问该页面 - http://127.0.0.1:8000/test/default/index
组件插件
组件插件是唯一定义Components 的插件。组件通过其模型定义直接访问数据库。
正如前面的示例中提到的,评论组件到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)