- Web2py 教程
- Web2py - 首頁
- Web2py - 簡介
- Web2py - Python 語言
- Web2py - 框架概述
- Web2py - 核心
- Web2py - 檢視
- Web2py - 資料庫抽象層
- Web2py - 表單與驗證器
- Web2py - 郵件與簡訊
- Web2py - 訪問控制
- Web2py - 服務
- Web2py - 新增 Ajax 效果
- Web2py - 元件
- Web2py - 部署
- Web2py - 安全性
- Web2py 有用資源
- Web2py - 快速指南
- Web2py - 有用資源
- Web2py - 討論
Web2py - 服務
web2py 支援多種協議,例如 XML、JSON、RSS、CSV、XMLRPC、JSONRPC、AMFRPC 和 SOAP。每種協議都以多種方式支援,我們區分以下幾種:
- 以特定格式渲染函式的輸出。
- 遠端過程呼叫。
渲染字典
考慮以下維護會話計數的程式碼:
def count(): session.counter = (session.counter or 0) + 1 return dict(counter = session.counter, now = request.now)
上述函式在使用者訪問頁面時會增加計數。假設此函式定義在 web2py 應用程式的 **“default.py”** 控制器中。可以使用以下 URL 請求該頁面:**http://127.0.0.1:8000/app/default/count**
web2py 可以透過向 URL 新增副檔名來以不同的協議渲染上述頁面,例如:
http://127.0.0.1:8000/app/default/count.html
http://127.0.0.1:8000/app/default/count.xml
http://127.0.0.1:8000/app/default/count.json
上述操作返回的字典將以 HTML、XML 和 JSON 格式呈現。
遠端過程呼叫
web2py 框架提供了一種機制,可以將函式轉換為 Web 服務。此處描述的機制與之前描述的機制不同,因為:
- 包含函式中的引數。
- 函式必須在模型中定義。
- 它強制執行更嚴格的 URL 命名約定。
- 它適用於一組固定的協議,並且易於擴充套件。
- 要使用此功能,需要匯入並初始化服務物件。
要實現此機制,首先必須匯入並例項化一個服務物件。
from gluon.tools import Service service = Service()
這在腳手架應用程式的 **"db.py"** 模型檔案中實現。**Db.py** 模型是 web2py 框架中的預設模型,它與資料庫和控制器互動,以向用戶提供所需的輸出。
實現後,可以根據需要從控制器訪問模型中的服務。
以下示例展示了使用 Web 服務實現遠端過程呼叫的各種方法以及更多內容。
Web 服務
Web 服務可以定義為一種標準化的方法,用於使用 XML、SOAP、WSDL 和 UDDI 等協議整合基於 Web 的應用程式。
web2py 支援其中大部分,但整合將非常棘手。
使用 jQuery 使用 web2py JSON 服務
有多種方法可以從 web2py 返回 JSON 表單,但這裡我們考慮 JSON 服務的情況。例如:
def consumer():return dict()@service.json def get_days():return ["Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat"] def call():return service()
在這裡,我們觀察到:
該函式只返回一個空字典來渲染檢視,該檢視將使用該服務。
**get_days** 定義了服務,函式呼叫公開了所有註冊的服務。
**get_days** 不需要在控制器中,可以在模型中。
**call** 始終位於 default.py 腳手架控制器中。
包含使用者操作的檢視如下:
{{extend 'layout.html'}}
<div id = "target"></div>
<script>
jQuery.getJSON("{{= URL('call',args = ['json','get_days'])}}",
function(msg){
jQuery.each(msg, function(){ jQuery("#target").
append(this + "<br />"); } )
}
);
</script>
**jQuery.getJSON** 的第一個引數是以下服務的 URL:**http://127.0.0.1:8000/app/default/call/json/get_days**
這始終遵循以下模式:
http://<domain>/<app>/<controller>/call/<type>/<service>
URL 位於 **{{...}}** 之間,因為它是在伺服器端解析的,而其他所有內容都在客戶端執行。**jQuery.getJSON** 的第二個引數是一個回撥函式,它將接收 JSON 響應。
在這種情況下,回撥函式會迴圈遍歷響應中的每個專案(一週中的幾天作為字串的列表),並將每個字串附加到 **<div id = "target">** 後面,後面跟著一個 **<br/>**。
透過這種方式,web2py 使用 **jQuery.getJSON** 管理 Web 服務的實現。