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