- Web2py 教程
- Web2py - 首页
- Web2py - 简介
- Web2py - Python 语言
- Web2py - 框架概述
- Web2py - 核心
- Web2py - 视图
- Web2py - 数据库抽象层
- Web2py - 表单和验证器
- Web2py - 邮件和短信
- Web2py - 访问控制
- Web2py - 服务
- Web2py - 添加 Ajax 效果
- Web2py - 组件
- Web2py - 部署
- Web2py - 安全性
- Web2py 有用资源
- Web2py - 快速指南
- Web2py - 有用资源
- Web2py - 讨论
Web2py - 组件
组件定义为网页的独立功能部分,可以自主运行。它可以由嵌入网页的模块、控制器和视图组成。应用程序中的组件必须是本地化的标签,并且其性能被认为与模块无关。
在 web2py 中,主要关注的是使用加载到页面中并通过 AJAX 与组件控制器通信的组件。
web2py 包含一个名为 **LOAD** 的函数,它使得无需显式 JavaScript 或 AJAX 编程即可轻松实现组件。
考虑一个名为“**test**”的简单 web 应用程序,它使用“**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/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)