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 服務的實現。

廣告
© . All rights reserved.