Web2py 组件
一个组件被定义为网页的功能部分,可以自主地运行。它可以由嵌入在网页中的模块、控制器和视图组成。应用中的组件必须是本地化的标签,并且性能被认为是与模块无关的。
在web2py中,主要关注的是使用在页面加载并通过AJAX与组件控制器通信的组件。
web2py包括一个名为 LOAD 的函数,它使得实现组件变得容易,无需显式的JavaScript或AJAX编程。
考虑一个简单的网络应用程序,即名为” 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()
在 视图 中,我们可以添加组件 –
{{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)