2013/08/03

View Pattern

View 是新式 Python 網站框架的重要元件,新版的 Plone 使用 View 機制來顯示動態網頁,或是處理表單內容,它可以完整取代舊版的 Skin Layer 機制。

Skin Layer 是顯示動態網頁的傳統機制,它通常透過 Restricted Python 來執行程式邏輯,包括副檔名是 .cpy 的 Controller Script 檔案,再由 Page Template 顯示畫面。但這類 Python Script 並不是一般的 Python 程式,它們只允許執行特定功能,如果存取超過安全範圍的功能,就會出現 Unauthorized: The container has no security assertions 的錯誤。

另一個常見問題是,Skin Layer 的 Script 或 Template 可以在任何 context 裡執行。以 plone_content 的 document_view 為例,通常它該和 Page 搭配,但在 /some-news-item/document_view 的情況下,Zope 仍會試圖執行它,這樣很容易遇到 AttributeError 的錯誤。

當然,也有些 Script 或 Template 屬於通用類型的設計,在多種 context 裡都適合執行,以 plone_forms 裡的 content_status_history 為例,只要內容型別實作 Workflow 功能,就適合搭配它來執行。無論如何,預計在 Plone 5 之際,Skin Layer 將大幅被 View 機制取代。

View 主要由 Python class 和 Page Template 組成,通常還搭配 JavaScript 或 CSS 等資源檔,除了產生 HTML 檔案外,也可以輸出成 JSON、Excel 檔案格式,或是匯出資料到 SQL 資料庫

在 Plone 環境裡,Browser View 是最常見的應用方式,通常也會搭配 Viewlet 或 Layer,設定進階的控制細節。

No comments: