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()

查看中,我们可以添加组件 :

 
 {{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)