组件被定义为网页的功能部分,它可以自主运行.它可以由嵌入在网页中的模块,控制器和视图组成.应用程序中的组件必须是本地化标记,并且性能被视为独立于模块.
在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:}}On {{= post.created_on}} {{= post.created_by.first_name}} says {{= post.body}}{{pass}}{{= form}}
可以使用给定的URL访问该页面 : 去; http://127.0.0.1:8000/test/comments/post
上述方法是一种访问视图的传统方式,可以更改实现LOAD函数.
这可以通过创建一个扩展名为".load"但不扩展布局的新视图来实现.
创建的新视图将是"views/comments/post.load" :
On {{= post.created_on}} {{= post.created_by.first_name}} says{{pass}}{{= form}}{{= post.body}}
访问该页面的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
" 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)