1 概述

Zope和CMF都是Plone需要的核心技術。

Zope是由Python編寫的,他是一個強大的面向對象的、開源的編程語言,他和Perl及Tcl比較類似。使用Plone,甚至基本的管理,都不需要Python的知識;然而,定制產品和Plone上腳本編程是需要一些Python知識的。

如果你打算使用Plone做一些復雜的事情,就需要花1-2天學習Python的基礎知識。這不僅將讓你能更充分地定制Plone,而且他將讓你熟悉這些對象,以及他們如何在Plone環境中相互作用。

幸運的是,Python是一個非常容易學習的編程語言;一般,一個熟練的編程人員一天便可完全掌握他。新的編程人員稍微長些。如果你在Windows或者Mac上安裝Plone,Python的正確版本灰自動安裝上。如果要在幾乎任意的操作系統中,獨立地下載安裝Python,請到 http://www.python.org.

掌握Python的最佳方法是在一個命令行的Python解釋器中試用他。如果你有Plone的一個Windows安裝程序,會有一個到Pythonwin鏈接,他是一個Python的集成開發環境(IDE)。你可以在“開始”菜單中找到它:開始 - 程序 - Plone - Pythonwin (圖 1-2).

2 安裝

   下載地址:http://plone.org/products/plone

   

啟動后登錄的用戶名與密碼是:admin, password

一些配置文件位于:E:\java\Plone 3\Data\etc

3 模板

當你向Plone請求一個“統一資源定位符”(URL)的時候,Plone環境中的一個對象被調用了。Plone通過把URL翻譯成一個路徑,來完成這個過程。因此,如果URL是 /Plone/login_form, Plone就會把這個URL分割為一個路徑,并因此在對象數據庫中查看每個對象。他首先尋找 Plone 對象,再在 Plone 對象內部尋找 login_form 對象。這個路徑查詢的過程,叫做 變量traversal; 在本質上,zope遍歷了這些對象,然后調用了路徑中的最后一個對象。如果你在瀏覽器中調用URL: /Plone/Members/login_form ,那么上下文就變成了 /Plone/Members. Plone和Zope整個發布系統中,有一個精妙之處,叫做 獲取(acquiaition). 獲取后面的概念是一種容器包含關系:對象被放置在叫做 容器 的其他對象中。在前面的例子中, andy 對象是一個容器,它位于 Members 容器中,然后位于Plone網站容器中(它有反過來位于Zope應用容器中).

在一個標準的面向對象環境中,一個對象繼承了它父對象的行為。在Plone和Zope中,一個對象也繼承了它的容器的行為。一個對象可以查找整個容器層次結構,以計算出如何得到這個行為。

4 Python

     一句話,javascript只適合客戶端,python既適合客戶端也適合服務端而已。

Python是一門優雅而健壯的編程語言,它繼承了傳統編譯語言的強大性和通借鑒了簡單腳本和解釋語言的易用性。它可以幫你完成工作,而且一段時間以后,你還能看明   

白自己寫的這段代碼。你會對自己如此快地學會它和它強大的功能感到十分的驚訝,更不用提你已經完成的工作了!只有你想不到,沒有Pytyon做不到。

類似于JAVA,它實際上是字節編譯的,其結果就是可以生成一種近似機器語言的中間形式,這不僅改善了它的性能,還同時使它保持了解釋型語言的優點。它的源代碼通常以.py為擴展名,由于調用方式的不同,源文件會被編譯成帶有.pyc.pyo擴展名的文件.

 

下面講講,如何在Windows下方便地進入命令行運行程序

在windows下的cmd窗口中執行python程序,我一般是這樣做:

1. 執行一個reg文件,內容為:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\cmd\command]
@="cmd.exe /k \"cd %L\""

它的作用是在你的資源管理器上的右鍵菜單上增加一個菜單,名字為cmd。那么以后你在目錄欄中點擊一個目錄,然后點右鍵,再執行這個cmd菜單,就會直接進入這個目錄的命令行。

2. 因為已經進入了你的python程序所在的目錄,因此直接在命令行下運行:

Python yourprog.py

即可。

前提是你已經將 Python 的安裝目錄加到 PATH 的環境變量中。

 

4.1 Python與其他語言比較

然而,往往因為Python是一門解釋型語言,你會發現大多數的比較是在Perl、Java、Tcl,還有 JavaScript 之間進行的。Perl 是另外一種腳本語言,遠遠超越了標準的 shell 腳本。像Python一樣,Perl賦予了你所有編程語言的功能特性,還有系統調用能力。 Perl最大的優勢在于它的字符串模式匹配能力,其提供了一個十分強大的正則表達式匹配引擎。這使得Perl實際上成為了一種用于過濾、識別和抽取字符串文本的語言,而且它一直是開發 Web 服務器端 CGI(common gateway interface,通用網關接口)網絡程序的最流行的語言。Python的正則表達式引擎很大程度上是基于Perl的。 然而,Perl語言的晦澀和對符號語法的過度使用,讓解讀變得很困難。這些語法令初學者不得精要,為他們的學習帶來了不小的阻礙。Perl的這些額外的“特色”使得完成同一個任務會有多個方法,進而引起了開發者之間的分歧和內訌。最后,通常當你想閱讀幾個月前寫的Perl腳本的時候都不得不求助參考書。 Python 也經常被拿來和 Java 作對比,因為他們都有類似的面向對象的特性和語法。Java的語法盡管比C++簡單的多,但是依舊有些繁瑣,尤其是當你想完成一個小任務的時候。Python的簡潔比純粹的使用Java提供了更加快速的開發環境。在Python和Java的關系上,一個非常重大的革命就是 Jython 的開發。Jython 是一個完全用 Java 開發的 Python 解釋器,現在可以在只有Java虛擬機的環境中運行Python程序。我們會在后面的章節中簡單講述Jython的更多優點,但是現在就可以告訴你:在 Jython 的腳本環境中,你可以熟練地處理 Java 對象,Java可以和 Python 對象進行交互,你可以訪問自己的 Java 標準類庫,就如同 Java 一直是 Python環境的一部分一樣。

JavaScript 是另外一種非常類似Python的面向對象腳本語言。優秀的JavaScript程序員學起Python來易如反掌。 聰慧的讀者會注意到JavaScript是基于原型系統的,而Python則遵循傳統的面向對象系統, 這使得二者的類和對象有一些差異

我們在上一節中曾經提到, 還有一個可以用的 Python解釋器是完全由Java寫成的, 名為 Jython。 盡管兩種解釋器之間存在一些細微的差別, 但是它們非常接近, 而且啟動環境也完全相同。那Jython 又有哪些優勢呢? Jython...

l         只要有Java虛擬機, 就能運行Jython

l         擁有訪問Java包與類庫的能力

l         為Java開發環境提供了腳本引擎

l         能夠很容易的測試Java類庫

l         提供訪問Java原生異常處理的能力

l         繼承了JavaBeans特性和內省能力

l         鼓勵Python到Java的開發(反之亦然)

l         GUI開發人員可以訪問 Java 的 AWT/Swing 庫

l         利用了Java原生垃圾收集器(CPython未實現此功能)

4.2 Python語言基礎(沒說明的就是和JAVA語法一樣)

下劃線(_)在解釋器中有特別的含義,表示最后一個表達式(注意不是語句)的值。所以上面的代碼執行之后,下劃線變量會包含字符串

Pythonprint語句,與字符串格式運算符( % )結合使用,可實現字符串替換功能,這一點和 C 語言中的printf()函數非常相似: >>> print "%s is number %d!" % ("Python", 1) 

 

下面是一個將輸出重定向到日志文件的例子:

logfile = open('/tmp/mylog.txt', 'a')

print >> logfile, 'Fatal error: invalid input!'

logfile.close()

 

從鍵盤輸入數據:>>> user = raw_input('Enter login name: ') 

 

獲得幫助:help(raw_input)

 

注釋是以“#”號開頭

4.2.1 運算符

Python有兩種除法運算符,單斜杠用作傳統除法,雙斜杠用作浮點除法(對結果進行四舍五入)。傳統除法是指如果兩個操作數都是整數的話,它將執行是地板除(取比商小的最大整數)(關于“地板除”請參考第5章——譯者注),而浮點除法是真正的除法,不管操作數是什么類型,浮點除法總是執行真正的除法。你可以在第五章(數字)學到更多有關傳統除法、真正的除法及浮點除法的知識。

Python當然也有標準比較運算符, 比較運算根據表達式的值的真假返回布爾值:

 <       <=      >       >=      ==      !=      <>

Python也提供了邏輯運算符:

and    or      not

4.2.2 變量和賦值

大小寫敏感。

Python是動態類型語言, 也就是說不需要預先聲明變量的類型。

 

Python支持五種基本數字類型,其中有三種是整數類型。

 int (有符號整數)          

long (長整數)          

bool (布爾值)          

float (浮點值)         

complex (復數

Python的長整數所能表達的范圍遠遠超過C語言的長整數, 事實上,

Python長整數僅受限于用戶計算機的虛擬內存總數。如果你熟悉 Java, Python的長整數類似于 Java 中的BigInteger 類型     

其實還有第六種數字類型, decimal 用于十進制浮點數。不過它并不是內建類型, 你必須先導入 decimal 模塊才可以使用這種數值類型。 由于需求日漸強烈, Python 2.4增加了這種類型

 

Python 中字符串被定義為引號之間的字符集合。Python 支持使用成對的單引號或雙引號,三引號(三個連續的單引號或者雙引號)可以用來包含特殊字符。使用索引運算符( [ ] )和切片運算符( [ : ] )可以得到子字符串。字符串有其特有的索引規則:第一個字符的索引是 0,最后一個字符的索引是 1

4.2.3 列表和元組

可以將列表和元組當成普通的“數組”,它能保存任意數量任意類型的Python對象。和數組一樣,通過從0開始的數字索引訪問元素,但是列表和元組可以存儲不同類型的對象。 列表和元組有幾處重要的區別。列表元素用中括號( [ ])包裹,元素的個數及元素的值可以改變。元組元素用小括號(( ))包裹,不可以更改(盡管他們的內容可以)。元組可以看成是只讀的列表。通過切片運算( [ ] [ : ] )可以得到子集,這一點與字符串的使用方法一樣。

即小括號包著的是元組,中括號包著的是列表,元組不能被修改,列表則可以。

4.2.4 字典

就是哈希,用大擴號包著的。

>>> aDict = {'host': 'earth'} # create dict

>>> aDict['port'] = 80 # add to dict

>>> aDict

{'host': 'earth', 'port': 80}

>>> aDict.keys()

['host', 'port']

>>> aDict['host']

'earth'

>>> for key in aDict:

... print key, aDict[key]

...

host earth

port 80

4.2.5 代碼塊及縮進

代碼塊通過縮進對齊表達代碼邏輯而不是使用大括號,因為沒有了額外的字符,程序的可讀性更高。而且縮進完全能夠清楚地表達一個語句屬于哪個代碼塊。當然,代碼塊也可以只有一個語句組成。 對一個Python初學者來說, 僅使用縮進可能令他詫異。 人們通常竭力避免改變, 因此對那些使用大括號很多年的人來說, 初次使用純縮進來表示邏輯也許會多少感到有些不夠堅定。(不用大括號?到底成不成啊?)。然而回想一下, python有兩大特性, 一是簡潔,二是可讀性好。如果你實在討厭使用縮進作為代碼分界, 我們希望你從現在開始,半年后再來看一下這種方式。也許你會發現生活中沒有大括號并不會象你想像的那么糟糕。

4.2.6 語句

If , while等語句后面都有一個冒號。

>>> counter = 0

>>> while counter < 3:

... print 'loop #%d' % (counter)

... counter += 1

 

>>> for item in ['e-mail', 'net-surfing', 'homework',

'chat']:

... print item

對字符串來說, 很容易迭代每一個字符。

>>> foo = 'abc'

>>> for c in foo:

...     print c

range()函數經常和len()函數一起用于字符串索引。 在這里我們要顯示每一個元素及其

索引值:

>>> foo = 'abc'

>>> for i in range(len(foo)):

... print foo[i], '(%d)' % i

...

a (0)

b (1)

c (2)

不過, 這些循環有一個約束, 你要么循環索引, 要么循環元素。這導致了enumerate()

函數的推出(Python2.3新增)。 它同時做到了這兩點:

 

>>> for i, ch in enumerate(foo):

... print ch, '(%d)' % i

...

a (0)

b (1)

c (2)

4.2.7 列表解析

4.2.8 文件操作

   ilename = raw_input('Enter file name: ')

fobj = open(filename, 'r')

for eachLine in fobj:

print eachLine,

fobj.close()

4.2.9 錯誤和異常

try:

filename = raw_input('Enter file name: ')

fobj = open(filename, 'r')

for eachLine in fobj:

print eachLine, fobj.close()

except IOError, e:

print 'file open error:', e

4.2.10 函數

   定義函數:

def addMe2Me(x):

        'apply + operation to argument'

        return (x + x)

4.2.11

    class ClassName(base_class[es]):

        "optional documentation string" 

        static_member_declarations 

        method_declarations

4.2.12 模板

模塊是一種組織形式, 它將彼此有關系的Python代碼組織到一個個獨立文件當中。

模塊可以包含可執行代碼, 函數和類或者這些東西的組合。

4.2.13 語法和句法

Python語句中有一些基本規則和特殊字符:  

l         井號(#)表示之后的字符為 Python 注釋  

l         換行 (\n) 是標準的行分隔符(通常一個語句一行)  

l         反斜線 ( \ ) 繼續上一行  

l         分號 ( ; )將兩個語句連接在一行中  

l         冒號 ( : ) 將代碼塊的頭和體分開  

l         語句(代碼塊)用縮進塊的方式體現  

l         不同的縮進深度分隔不同的代碼塊  

l         Python文件以模塊的形式組織

4.2.14 第一個程序實例

#!/usr/bin/env python

 

'makTextFile.py -- crate text file'

 

import os

ls = os.linesep

 

#get filename

fname = raw_input('input filename please: ')

done = False

while not done:

    if os.path.exists(fname):

        print "ERROR: '%s' already exists" % fname

        break

    else:

        print 'get file content'

        all = []

        print "\nEnter lines ('.' by itself to quit).\n"

        while True:

            entry = raw_input('please input content:')

            if entry =='.':

                break

            else:

                all.append(entry)

        print 'write line to file'

        fobj = open(fname,'w')

        fobj.writelines(['%s%s' % (x,ls) for x in all])

        fobj.close()

        done = True;

        print "DONE!"

4.2.15 相關模塊和開發工具

l         Debugger: pdb  

l         Logger: logging  

l         Profilers: profile, hotshot, cProfile

4.3 Python對象

所有的Python對像都擁有三個特性:身份,類型和值。一個對象都有一個唯一的身份標識自己,任何對象的身份可以使用內建函數id()來得到。您可以用內建函數type()查看Python對象的類型。

4.3.1 Python對象

None, Python Null 對象,相當于void

4.3.2內部類型

 代碼    

   

跟蹤記錄 

切片 

省略  

Xrange

代碼對象是編譯過的Python源代碼片段,它是可執行對象。通過調用內建函數compile()

可以得到代碼對象。代碼對象可以被 exec 命令或 eval()內建函數來執行。在第 14 章將詳細研究代碼對象。代碼對象本身不包含任何執行環境信息, 它是用戶自定義函數的核心, 在被執行時獲得上下文。(事實上代碼對象是函數的一個屬性)一個函數除了有代碼對象屬性以外些其它函數必須的屬性,包括函數名,文檔字符串,默認參數,及全局命名空間等等。

幀對象表示 Python 的執行棧幀。幀對象包含Python解釋器在運行時所需要知道的所有信息。它的屬性包括指向上一幀的鏈接,正在被執行的代碼對象(參見上文),本地及全局名字空間字典以及當前指令等。每次函數調用產生一個新的幀,每一個幀對象都會相應創建一個 C

4.3.3標準類型內建函數

cmp(obj1, obj2)    比較 obj1 obj2, 根據比較結果返回整數 i:

repr(obj) `obj` 返回一個對象的字符串表示

str(obj)           返回對象適合可讀性好的字符串表示

type(obj)         得到一個對象的類型,并返回相應的type對象

4.3.4不支持的類型

char byte: Python沒有 char byte 類型來保存單一字符或8比特整數。你可以使用長度為1的字符串表示字符或8比特整數。

指針:Python 替你管理內存,因此沒有必要訪問指針。在 Python 中你可以使用 id()函數得到一個對象的身份號, 這是最接近于指針的地址。因為你不能控制這個值,所以其實沒有太大意義。其實在Python中, 一切都是指針。

4.4 Python訪問數據庫

4.5 Jython

Jython是一種可以把兩種不同的編程語言結合在一起的工具。首先,它使Python程序員介入到Java開發環境并讓他們能快速開發方案原型,以便無縫地集成到現有的Java平臺上。Jython 提供了 Python 的大部分功能,以及實例化 Java 類并與 Java 類交互的功能。Jython 代碼被動態地編譯成Java字節碼,因此,你可以用Jython擴展Java類。也可以用Java來擴展Python。在Python中寫一個類,像使用Java類一樣使用這個類是很容易的事情。你甚至可以把Jython腳本靜態地編譯為Java字節碼。

 安裝:java -jar jython_installer-2.2.1.jar

 再雙擊安裝目錄下的jython.bat就可以運行程序了。

Jython交互解釋器的一個更有趣的方面就是,現在,你可以用Java來寫“Hello

World!”了:

 >>> from java.lang import System

>>> System.out.write('Hello World!\n') 

Hello World!

 

運行例子,先將安裝目錄加入到環境變量PATH中,然后直接在命令行中到例子所在目錄運行:jython example.py即可

4.5.1JAVA里運行腳本

在Jython的源包jython.jar中,包含了一種最基本的腳本解釋器:PythonInterpreter。代碼如下:

Java代碼

  1. PythonInterpreter interp = new PythonInterpreter();  
  2.       interp.execfile("./script/listing.py");  

 

除此之外,還可以使用JSR223,JDK1.6已經包含了該擴展包。JSR223是一個用于解析多種腳本語言的庫包,其中包括Jython。除了JSR223包之外,還需要jython-engine.jar包。代碼如下:

Java代碼

  1. ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");  
  2. try  
  3. {  
  4.     engine.eval(new FileReader("./script/listing.py"));  
  5. }  
  6. catch(ScriptException se)  
  7. {  
  8.       
  9. }  
  10. catch(IOException ie)  
  11. {  
  12.       
  13. }  

5 Zope

ZopeZ Object Publishing Environment,它既是http服務器,又是數據庫,又包含腳本編程語言。Zope是一種支持多種平臺開源的Web應用服務器軟件,它提供了完善 的功能和強大的動力,適用于構建各種類型的Web應用,從小型網站到企業級分布式網絡應用都有Zope的用武之地。Zope在許多方面都超過了ASP PHPJSP等傳統方法,是一套優秀而完整的解決方案。本專題詳述Zope的應用開發,帶您領略Zope的強大功能。

參考資料:Zope應用開發指南 http://os.51cto.com/art/200602/21544.htm

 

Zope(Z Object Publishing Environment)是一款網站建設工具,它是建立在服務或發布對象的基礎上,而不僅僅上增加網頁內容。Zope的支持者們相信,這款軟件是對傳統網 站建設工具和應用服務器的挑戰,比如,ColdFusion和網景應用服務器。另外,Zope軟件是免費并且開發源代碼的。

Zope的軟件開發人員將Zope設計成一款對象發表軟件。他們的設想是讓用戶直接和實時對象交互,而不是傳統上的和被服務的動態更新文件打交道。 Zope組件包括一個發布向導,它負責使用穩定的Zope CGI協議發布對象;另一個組件是被Zope視為文件夾,文件和圖形框架的內建框架;組件之三是支持動態也產生的模板;組件之四是對象數據庫。因為 Zope有SQL語言和數據庫適配器的支持,所以它可以實現和傳統數據庫的互交功能,如微軟的SQL Server。通常情況下,Zope對象數據庫使用文件操作系統來管理數據。但是,Zope同時也支持關系數據庫。像Oracle、Sybase、 MySQL和Open Database Connectivity它都支持。 

Zope的大部分代碼是用Python語言寫成的,Python是一種具有很強的交互性,類似于java的面對對象編程語言。同時,為了提供系統的系統,也采用了少量的c代碼。同時,Zope可以運行于大多數的操作系統平臺。

Zope是一個開源的web應用服務器,主要用python寫成;它是一個事務型的對象數據庫平臺。Zope是一種支持多種平臺的Web應用服務器 軟件,它提供了完善的功能和強大的動力,適用于構建各種類型的Web應用,從小型網站到企業級分布式網絡應用都有Zope的用武之地。Zope在許多方面 都超過了ASP、PHP、JSP等傳統方法,是一套優秀而完整的解決方案。

Zope除了能儲存內容,數據外,還能存放動態的HTML模板、腳本、搜索引擎、關系數據庫管理系統(RDBMS)接口和代碼。

Zope里的一切都是對象。它有一個強大的基于web的在線開發模板,使你能在世界上任何地方,任何時間方便地更新你的網站。作為對以上功能的安全保障,zope提供了一個集成的安全模型,能方便對數據庫的內容進行分層授權管理。可以把個人的內容分配給個人用戶管理,部門的內容分配給部門管理員管理,整個網站的內容由系統管理員管理。

現在基于Zope平臺已開發出了大量的產品,能方便地嵌入zope中以擴展它的基本功能。Zope3已發布,這是一個全新設計的Web開發架構。采用組件和接口技術,實現Web應用的快速開發和布署。

Zope成為產品的技術就是基于 Web 從根本上來說是面向對象的。Zope 中的對象是層次型的,就像我們熟悉的一些概念一樣,例如文件夾,文檔,圖象,SQL 查詢語句。 Zope 的層次環境里,URL根據名字映射為其中的對象。例如URL"/Marketing/index.html",映射為文件夾對象"Marketing" 下面名為“index.html”的文檔對象。

Zope 對象的建立和管理十分方便,只要打開瀏覽器,進入管理界面,所有管理和應用開發界面都可以通過瀏覽器來完成,界面就像 Windows 的資源管理器。通過這個界面,開發人員不必存取服務器上的文件系統就可以創建Zope 對象或者定義新的對象類型。
象可以放到對象層次的任意地方。網站管理員可以點擊目錄欄得到對象的不同視圖,這些視圖視對象類型不同而不同,對于 DTML 文檔,可以有 “Edit”用來編輯文檔源碼,而數據庫連接對象則讓你修改連接字符串或者緩沖參數。所有的對象都有安全視圖以控制存取權限。
Zope 對象存放在高性能的事務型對象數據庫中,可以采用文件系統或者關系數據庫作后臺存儲。每一個Web 請求作為對象數據庫中分離的事務,如果應用中發生錯誤,請求事務就會自動回滾。同時,對象數據庫還提供多級回退。網站管理員可以點擊鼠標取消曾經做過的操 作。Zope 框架讓所有細節和事務對應用開發人員都透明。

Zope 的心臟就是 DTML (文檔模板標記語言),這個功能強大的變量插入和表達語言,提供對 Zope 對象的安全腳本和動態內容產生。

Zope 的數據源可以包括關系數據庫,以及非關系型的 LDAP/IMAP 等。 Zope 支持常見的關系型數據庫,包括Oracle, Sybase, MySQL 以及大多數 ODBC 兼容的數據庫。
   為了存取后臺數據,你需要建立一個數據庫連接對象,然后建立 SQL 方法對象,這個對象能使用 DTML ,能很方便的建立動態的查詢語句。下面建立的 getTasks 對象是從"tasks"表中選出對應用戶的任務:

-----------------------------------------------
select * from tasks
where
emp_id='<!--#var AUTHENTICATED_USER-->'
-----------------------------------------------
結果集的數據應用于 DTML 文檔:
-----------------------------------------------
<h2><!--#var AUTHENTICATED_USER--> 的任務</h2>
<table>
<!--#in getTasks-->
<tr>
<td><!--#var title--></td>
<td><!--#var due_date--></td>
</tr>
<!--#/in-->
</table>
--------------------------------------------

Zope 開發環境的另外一個好處就是它的事務模型能自動延伸到后臺數據庫,如果你的關系型數據庫支持事務,Zope 會在運行SQL 方法之前自動開始事務,而在 Web 請求成功結束后自動提交事務,如果其中發生錯誤則會自動回滾,使事務的集成對Web 開發人員完全透明。

Zope 的強大功能之一就是它簡單而成熟的數據共享模型,這個模型叫做獲取,核心的概念可以簡單的描述為:
Zope 對象包含于其它對象中(例如,文件夾)
對象能夠獲取容器中的屬性,內容,行為。

以前,我們決定把我們網站的頭和腳封裝到分離的 DTML 文檔,這樣能包含其他網站的內容,但是這個設計在拷貝頭和腳到網站內所有的文件夾時發生了問題。如果我們采取獲取的辦法,在網站的頂層文件夾建立頭和腳,下層的 DTML 就能自動獲取 這個概念對所有的對象都適用,對把常用的資源集中起來十分有用。例如,對一個經常用到的 SQL 查詢語句,我們可以把它定義在一個文件夾里,子文件夾里的對象能自動通過獲取來使用它,如果要改變查詢語句,只需要改動一個地方就可以了。

Zope的特點是把文件和文件夾作為基本的對象,每個文件和文件夾都可以隨意增加屬性,同時,文件夾下面的文件和文件夾又是父文件夾的屬性。通過增加腳本 文件的形式,可以為文件和文家夾增加方法。比如,一個文件可以加入作者分類難度等級等屬性,文件夾也可以加入顯示此文件夾下所有文件內 的方法。

Zope的現在的缺點是,不能直接使用外部文件,還要通過ftp復制到數據庫中。現在有對這方面的補救措施,但不是Zope默認的。希望Zope將來能象操作自己的對象一樣操作外部文件和其他網站的文件。

網站中數據庫中主要的數據是文檔,Zope作為文檔數據庫,有強大的文檔管理功能,有版本管理、歷史記錄功能,有全文檢索功能。同時集成了文檔的編輯環境和管理環境,管理文檔象在文件管理器中一樣方便。這些都是一般的數據庫所不具備的。

如果,數據庫中有上萬條記錄,Zope的效率會比傳統數據庫要低,但Zope有大量的適配器來鏈接各種數據庫。來實現純表格操作和大量的記錄操作。

Zopedtml(動態模板標記)語言來嵌入HTML中,實現網頁的動態化。簡單地使用地形式就可以插入動態內容。由于可以方便地加入屬性和方法以及獲取功能,文檔具有極為豐富的變量環境。可以比一般的客戶端包含提供更強大的功能。又有的形式來方便地獲取多個文件地內容。在dtml中還可以嵌入 Python表達式。這樣,不用編程就具有強大的動態網頁功能,實現導航功能等也輕而易舉。這些功能的實現比PHP等語言要容易的多。

Perl愛好者有福了。在這里可以直接用sql操作數據庫,免去了把sql嵌入其他語言的麻煩。

6 plone

Zope/Plone 1、免費,不用花一分錢; 2、有真正免費的漢化包,不會有什么漢化者logo強行擠占頁面; 3Plone是面向最終用戶的,無需編程; 4、非編程不可,用ZopePython都是很簡單的。

Plone有一個非常好的產品開發工具Archetypes
Plone是python寫的,國內虛擬主機基本找不到支持的

6.1 plone站點數據史保存在什么地方,怎樣備份和移植plone站點?

Plone站點所有內容是保存在 Data.fs 文件理,這個文件位于 var 目錄 (具體定位可以搜索 Data.fs文件). 這個數據庫也通常作為zope的對象數據庫 (ZODB)。

http://315ok.org/boke/howtobeifenheyizhiplone

7 ZODB對象數據庫

ZODB 入門 http://www.ibm.com/developerworks/cn/aix/library/au-zodb/

Zope的數據存儲方式 http://blog.czug.org/panjy/zope-storage

ZODB筆記 http://wiki.woodpecker.org.cn/moin/ZODB%E7%AC%94%E8%AE%B0

中文版Zope外部編輯器客戶端

http://zopen.cn/products/open/ExternalEditor-zh

http://www.zope.org/Members/Caseman/ExternalEditor

Zope支持使用多種方式來數據,而不僅僅使用一個單獨的Data.fs文件

安裝Zope后,會發現數據均保存在一個Data.fs的文件中,而且采用的是一個不開放的存儲格式。很多人會產生疑問:

  • 一旦數據量增加了,這個獨立Data.fs能否承受?系統性能是否會變慢?
  • 我保存了大量的圖片、文檔,能否讓這些數據保存在文件系統中?
  • 關系數據庫已經非常成熟了,能否保存在關系數據庫中?

其實,獨立Data.fs僅僅是Zope一個缺省存儲方式,能夠滿足大多數的應用。通過定制和選擇其他的第三方插件,可以滿足其他的特殊要求。

  • ZODB支持多個storage。這樣您可以把您的Data.fs文件分割為多個文件,分別存儲數據。在$ ZOPEINSTANCE/etc/zope.conf中,可以設置具體的ZODB存儲方案。同時在ZMI中,需要mount相應的storage。使用 起來就好像在linuxmount一個分區一樣。
  • ZODBstorage有很多種,Data.fs僅僅是一個FileStorage,即單文件的storage方式。其他的storage包括DirectoryStorage(分目錄存儲數據), APE(可適配的存儲引擎,見后)BDBStorage(將數據保存在BerkerleyDB中),以及OracelStorage等。各個storage有不同的特點,可參考這個 對比
  • APE是一個可適配的存儲引擎,通過適配器,她能夠把python對象保存在一個文件系統中、或者關系數據庫中、或者其他任意的地方。目前主要用于ZODB,也可以用 zope/zodb外的其他Python項目。APE目前支持文件系統和數據庫的兩種適配。可提供到postgresql/mysql的映射,同時CA 公司也提供了到Ingres數據庫的映射適配器。APE得到了CA公司的支持。
  • 上面是一些ZODB相關的storage。實際上通過zope也可以直接訪問關系數據庫,直接將數據存儲在關系數據庫而不是存儲在ZODB上。
  • 如果開發新的產品,可使用ArchetypesArchetypes提供的拋開ZODB外的獨立的Storage,可將數據保存到文件系統或者數據庫(還不成熟)中。
  • zope3上,數據存儲的適配功能更強。目前有一個sqlos產品,利用了sqlobject (wiki)"對象-關系數據庫"映射機制,將數據保存到關系數據庫上。python上的對象和關系數據庫映射系統其實很多,除了sqlobject, 前面的ape上就有一個,其他的還有Modeling PyDO

因此,Zope的存儲是十分靈活的,他提供了十分全面的存儲機制,幾乎可以滿足您任意的存儲要求。

 

 

8 附錄:

8.1 Zope/Plone內容管理系統的探討與應用

[摘要] 隨著企業經營模式的變化和技術的不斷發展,從內容管理誕生到今天,關鍵技術的研究側重于支撐內容管理平臺的核心技術研究,主要包括XML和元數據技術、工 作流管理技術、應用集成技術以及數據檢索和挖掘技術。Zope/Plone內容管理系統作為開源項目,正適應內容管理關鍵技術的發展要求,可以為企業或部 門建立一個穩定、高效、安全的內容管理系統。科技信息作為一種重要的信息資源,完全可以利用內容管理系統來進行管理。本文主要探討了內容管理的基本概念及 Zope/Plone內容管理系統的特點,如何在實踐中搭建科技信息網。本文嘗試利用Zope/Plone搭建了集團公司科技信息網,目的是為用戶提供科 技信息、學術交流、期刊報紙、科技文摘、電子圖書、圖片資料、文件下載、全文檢索等服務。
關鍵詞:內容管理  CMS  Zope  Plone  Web技術  科技信息

1  前言
聯網的發展和應用是內容管理市場的強烈推動力。8年前,內容管理(Content Management)的觀念開始萌芽。如今,電子商務又變得非常流行,很多企業已看到電子商務的重要作用,開始大力發展電子商務,如OA系統、協作工作 平臺、協同商務。企業的信息化程度不斷加強,越來越多的信息將以數字化的形態呈現在信息處理、交互、傳播的過程中。越來越多的媒體和企業已經重新審視自己 所掌握的內容(信息資源),并視手中的信息資源為資產。
科技信息作為一種重要的信息資源,完全可以利用內容管理系統來進行管理。本文主要探討內容 管理的基本概念,Zope/Plone內容管理系統的特點,如何在實踐中搭建科技信息網。闡述了利用Zope/Plone搭建了集團公司科技信息網,為本 公司級用戶提供科技信息、學術交流、期刊報紙、科技文摘、電子圖書、圖片資料、文件下載、全文檢索等服務。系統應用環境:操作系統Windows 2000Web應用服務器Zope 2.7.0,開發語言Python 2.3.3,內容管理系統Plone 2.0.3(包括內容管理框架CMF 1.4.4)。
2  內容管理系統(CMS)的概述
2.1  Web應用中內容管理的引入
Web應用的簡要發展歷程分為三個階段:第一階段,簡單的信息發布,品牌推廣等;第二階段,門戶功能、銷售線索搜集、客戶服務、客戶關系等自助服務;第三階段,電子商務(eBusiness)等。
著信息量不斷增多與Web技術的成熟與發展,客戶端技術從靜態向動態的演進,Web服務端的開發技術也由靜態向動態逐漸發展。Web服務端開發技術的完善 也使開發復雜的Web應用成為可能,Web應用也日益復雜,Web的更新方式也有了較大的變更,其變化主要有三個階段:第一階段:靜態更新 Static),主要特點有手工編寫HTML或借用網頁制作工具、通過FTP上傳到服務器上、更新緩慢、容易出現鏈接錯誤、對服務器無特別要求等;第二 階段:實時更新(RealTime),主要特點有制作模板、使用動態主頁技術輸出HTMLCGIPerlASPPHPJSP Serverlet)、更新速度非常快、需要服務器上有數據庫支持、對服務器資源占用很嚴重、現在的大多數中小網站廣泛采用等;第三階段:及時更新 Just In Time),主要特點有引入了內容管理系統、自動的內容復制功能、更新及時、不依賴于服務器平臺、可有工作流支持、可進行版本控制、易擴展等。
2.2  內容管理系統
Web 應用需要一個完整的開發框架或應用模型,有幾種主要技術的融合方式,首先,越來越多的Web開發環境開始支持MVCModel-View- Controller),提供了全套的開發環境;其次,門戶服務(Portal Server)和內容管理系統(Content Management System)成為了應用集成的重點模型。
2.2.1  什么是內容管理
內容實質上就是任何類型的數字信息的結合體,可以是文本、圖形圖 象、Web頁面、業務文檔、數據庫表單、視頻、聲音文件等。應該說,內容是一個比數據、文檔和信息更廣的概念,是對各種結構化數據、非結構化文檔、信息的 聚合。管理就是施加在"內容"對象上的一系列處理過程,包括收集、確認、批準、整理、定位、轉換、分發、更新、存檔等,目的是為了使"內容"能夠在正確的 時間、以正確的形式傳遞到正確的地點和人。
內容管理是目前業內的一項熱門技術和應用。對于這項新興的技術,業內尚未有一個統一的定義,是協助組織 和個人,借助信息技術,實現內容的創建、儲存、分享、應用、更新,并在企業個人、組織、業務、戰略等諸個方面產生價值的過程,而內容管理系統就是能夠支撐 內容管理的一種工具或一套工具的組合。
2.2.2  內容管理系統的功能
如圖1所示,一個完整的內容管理系統應具有四大功能:內容集成、內容智能、內容管理和內容發布。

1 內容管理系統的功能結構
1)內容集成:讓使用者到不同系統中尋找到不同形式的資料文檔,如文檔、視頻、聲頻、圖形文件等。
2)內容智能:是內容管理系統的核心功能模塊,將內容分類歸檔,用以幫助使用者快速定位所需內容,按照搜索方法可分為全文搜索、上下文搜索等。現在更先進的檢索技術還包括智能化知識檢索技術,自然語言查詢等。
3)內容管理:是內容管理系統的主要功能模塊,用以提供對內容管理過程的支持,包括:
l 內容創建和編輯,用以實現各種數據、信息、文檔和程序的獲取并提供創建內容的協作工具,如文檔和網頁制作工具,數據轉換(Metadata and XML)工具等。
l 內容個性化,內容的個性化是內容管理區別于傳統文檔管理的一個重要特征,包括根據用戶喜好的用戶控制個性化、根據內容相關性的數據控制個性化等。
l 存檔管理,用以實現安全存貯、管理各種形式的內容。
l 工作流,用以實現用戶自定義的流程和基于角色的流程控制、審批流程等。
l 安全控制,包括數據庫安全控制、加密,拷貝和傳播限制等。
l 生命周期管理,主要是指對內容版本的控制,如多版本控制、版本跟蹤等功能。
4)內容發布:讓所有的使用者在同一個時間接收到信息,包括傳統的非Web方式的圖形用戶界面GUI以及新近發展起來的企業信息門戶等各種方式。
2.2.3  內容管理系統的分類
容管理系統主要有框架型和應用型。框架型:本身不包含任何應用實現,只提供底層框架,具體應用需要一定的二次開發,如商業軟件中有BEA WebLogic PortalOracle Portal Developer KitIBMWebSphere PortalMicrosoft Content Management Server等,開源項目中有CocoonZope等。應用型:本身是一個面向具體類型的應用實現,包含新聞/評論管理、圖片、文件下載、投票、論壇、 成員管理、Wiki等一些子系統。如開源項目中有PHP-NukeXOOPSPloneWiki(維基)、phpBB等。
3  Zope/Plone內容管理系統
內容管理系統作為當前一種流行的Web應用模型, Zope/Plone內容管理系統是開源項目(Open Source SoftwareOSS),為我們提供了一個很好的解決方案。
3.1  Zope應用服務器
ZopeZ Object Publishing EnvironmentZ對象發布環境)是下一代開放源碼應用服務器以及門戶工具,由Digital Creations開發,已經擁有一群相當活躍的用戶社群。它既可以在所有Unix/Linux平臺上運行,也能在WindowsMac OS上運行,不但能集成到其他流行的Web服務器,也帶有自己的Web服務器,Zope 2.7可到http://www.zope.org下載,安裝可參考有關手冊。提供了清晰的數據/邏輯/表示的分離,帶有可擴展的內置對象和強大的集成安 全模塊。還有大量的第三方產品支持。Zope采用Python語言編寫,在性能敏感的部件上采用了C語言編寫。
3.1.1  Zope的簡要特點
其它Web應用服務器相比,Zope可以更好更快的創建Web應用程序,主要特點有:免費、一套完整的平臺、第三方產品的支持、易擴展、可在大多數操作系 統上運行、高效的協同開發、提供多種和可擴展的安全框架、只使用瀏覽器就可以創建Web應用程序(IEMozillaNetscape)等。
Zope提供了所有必須的工具,能集成來自任何數據源的所有數據和內容,構成一個連續、可維護的Web應用,如Web服務器、Web方式的管理界面(ZMI)、對象數據庫(ZODB)、內容管理、內置搜索工具、強大的數據共享、安全授權、版本管理、XML的支持等。
Zope 2.7應用服務器的管理界面(ZMI)如圖2所示。

2 Zope 2.7應用服務器的管理界面(ZMI
3.1.2  Zope體系結構
Zope體系結構如圖3
ZServer,這是Zope內置的Web服務器,用于提供內容服務。這個web服務器還通過FTP WebDAVXML-RPC協議提供服務。
Web ServerWeb服務器),Zope還可以和現有的Web Server結合在一起,比如Apache或者Microsoft IIS,以及其它支持通用網關接口(CGI)的Web服務器。
Zope CoreZope核心),這是Zope的核心引擎,它控制如何顯示,以及控制管理界面和對象數據庫。
Object Database(對象數據庫),使用Zope的時候,大多數情況下是在處理存儲在Zope對象數據庫中的對象。
Relational Database(關系型數據庫),數據不一定要存儲在Zope對象數據庫中,Zope中可以使用其它的關系型數據庫,比如 Oracle, PostgreSQL, Sybase, MySQL等等。
File System(文件系統),Zope還可以使用存儲在服務器文件系統中的文檔和其它文件。
ZClasses,可以通過使用Web管理界面來添加新的對象。
Products(產品),Zope中還可以通過在Zope服務器中的文件系統里安裝"產品"文件來添加新的對象。

3 Zope體系結構
3.2  Plone內容管理系統
Plone 是基于Zope系統的優秀開源項目,包括CMF,特點是易用、功能強大,可管理發布HTMLWordPDF等各種類型文檔,支持工作流 (Workflow)、用戶管理、新聞/事件按排、全文搜索等功能,適合用作搭建對外網站、內部網系統、文檔發布、協同群件系統等。Plone 2.0.3可到http://www.plone.org下載,安裝可參考有關手冊。
3.2.1  系統特點
l 易用:Plone的開發團隊中包括專職的可用性設計專家, 他們使得Plone的添加、修改和維護等操作更加易用,支持結構化文本。
l 多語言:Plone界面支持30多種語言,系統本身也包括管理多種語言的工具。
l 標準:Plone遵循相關可用性標準和可訪問性標準開發,支持IEMozillaOpera等瀏覽器,以及PDA等手持設備上的瀏覽器;支持HTTPHTTPSFTPWebDAVXML-RPC等多種標準協議。
l 開放源代碼:Plone使用和Linux相同的許可協議(GPL)。用戶可以直接使用Plone,而不需要支付任何許可費用, 并可在其上進行定制擴展。
l 可擴展:有豐富的第三方產品可供選擇,如討論區、圖片庫、投票等,可以很容易擴展Plone系統,增加新的特性和內容類型。Plone本身也是一個開發平臺,可使用PythonZPTDTML腳本語言進行更多地定制開發。
l 跨平臺、支持多種數據庫。
操作系統:LinuxWindowsMac OS X, Solaris FreeBSD
數據庫:可同絕大多數的關系數據庫系統(開源的和封閉源代碼的)進行接口。
3.2.2  主要功能及第三方應用型產品
Zope是一個高可擴展的系統,Plone作為Zope的第三方產品,繼承了這個特點,可以在Plone的基礎上擴展各種應用,可以很輕松地安裝和卸載,并可以進行個性化定制。
Plone 系統本身所具有的主要功能:頁面文檔管理(Document),其他形式的內容管理-有圖片(Image)、文件(File)、鏈接(Link)、查詢集 Topic)、文件夾(Folder)、新聞(News)等,查詢檢索(Search),權限管理,工作流系統(Workflow System),成員管理(Members),還有評注文檔、站點參數配置、第三方產品的安裝、定制站點界面等。
其他第三方產品(可在http://www.zope.org下載):
l 論壇--CMFBoardCMFForum,可以設置一個或更多的子論壇;每個子論壇可以設置不同的狀態。
l 圖片--CMFPhotoAlbumCMFPhoto,建立一個圖片集文件夾,可以輕松自如地管理圖片,可以添加圖片,編輯其屬性(主題、描述、上傳圖片);還可以對圖片進行變換(旋轉、翻轉);瀏覽圖片時可以分頁顯示。
l ZWiki--ZWiki是在Zope平臺上提供的Wiki服務。它在功能上比傳統的Wiki有所區別,主要有:Wiki名字的更靈活;可選的標記格式, 如:結構化文本、HTML/DTMLWiki標記語言、無格式文本等;頁面的層次化,即可以顯示出頁面創建的級別,可以直接看到包含當前頁面的父文檔鏈 接。
l 文件--由于Zope除了對數據庫的支持,Zope還支持文件系統。可以把指定的當地文件系統的文件信息加載到站點中的一個文件夾,也支持HTTP上傳文件,并對文件添加注釋,可創建子目錄。
l 調查--PlonePopoll,可以自由地建立各類調查,只要編輯其調查的問題及選擇的項目,就可以生成一個調查,每位用戶都可以對調查投出唯一的一票;并且可以對調查結果作簡要的圖形分析,顯示投票總數及每個項目的票數。
3.2.3  Plone完全支持中文
Plone 支持中文的目標是:(1)界面支持中文;(2)支持中文查詢;(3)其他應用程序也支持中文。Plone 2.0.3已默認支持中文(由潤普科技ZopeChina提供),標準的Plone安裝后,自動支持中文的界面,但是不支持中文的全文檢索,結構化文本也 不太支持中文。根據潤普科技ZopeChina提供的方案,需要下載CJKSplitterZopeChinaPak的最新版本安裝,建立Plone 點時選擇"Default Chinese Plone"的個性化Plone設置,界面即可支持中文。最大特點是支持任意的語言:中文簡體、繁體、日本、韓文、歐洲。通過設置,可以讓Plone支持 中文全文搜索;其他應用程序只要有漢化包也就可以支持中文,即*-zh-cn.po*-zh.po,也可使用第三方產品Localizer進行本地化。
4  利用Zope/Plone內容管理系統整合科技信息
4.1  科技信息網項目背景
技信息作為企業一種技術資源,根據企業的發展狀況,科技管理主要產生的信息有:科研課題、學術論文、圖片資料、期刊圖書等,包括文字、圖片、圖表及視頻, 信息資源豐富、內容容量大、借閱訪問者多。如何把科技信息通過網絡的形式建設成為公司的知識資源開發利用中心,實現上述信息資源的集成與共享,加快公司在 科研、生產和經營方面獲取信息的速度。
科技信息網的規劃建設,涵蓋了從內容采集、存儲管理、編輯審核一直到傳遞服務的全部內容管理生命周期的管理。整合公司的科技信息資源,提高信息的利用率,最大限度地共享科技信息。
4.2  基于內容管理技術的系統設計
立科技信息網的目的是為了實現將來自科技管理處各職能室的科技信息(含文字、圖片、圖表)全部整合,并通過這一系統公司各部門對科技信息的共享。將總體需 求劃分為核心應用需求(信息采集、信息分類、信息編輯、信息發布、信息檢索、安全管理等)和輔助應用需求(用戶管理、日志管理、訪問統計、站點調查、信息 提示功能、支持多語言、數據的維護、站點的個性化設置、在線統計、日歷等)。
4.2.1  整體功能框架
科技信息內容管理系統的整體功能框架如圖4

4 科技信息內容管理系統的整體功能框架
4.2.2  硬件系統結構
Zope架構進行多層體系結構設計,在公司的局域網中可以實現多用戶、多操作系統的應用,可以在不同的時間、辦公地點進行內容的管理,更有效地整合科技 信息,實時地為用戶提供科技信息;系統可以輕松地對對象內容的擴展,增加各種形式的內容。用戶只要通過局域網用瀏覽器就可以瀏覽信息,硬件系統結構如圖 5

5  硬件系統結構圖
4.3  Zope/Plone內容管理系統的配置與應用
前文提到Zope/Plone 容管理系統的眾多特點及功能,并且使用Zope/Plone來搭建科技信息網,考慮到信息的多來源、多形式,有圖書文獻采集的科技文摘、科技活動中產生的 科技信息、科技圖書館的報刊雜志、學術交流活動產生的論文資料(包括Word)、公司各項活動中榮獲的獎勵證書圖片及科技圖片、圖書館的電子圖書 PDFCEBWordHtml)、常用文件下載(應用程序、Word資料、各類表格)等。
4.3.1  Plone第三產品的安裝及應用
Zope系統中建立一個Plone站點,根據Plone的基本特性和科技信息網的需求,需要充分了解Plone現有的一些第三方產品,建立一套第三方產品 的使用方案。Plone默認普通文檔主要有頁面文檔(Document)、事件(Events)、新聞(News),這些文檔都不能很好地與圖片、附件等 其他資料混合在一起,很難適應我們具有文本、圖片、附件為一體的信息。同時Plone沒有完整的圖片發布與管理產品,當然也沒有調查、統計等第三方產品。 可以安裝第三方產品,如:PloneArticlePlone文檔)、CMFPhotoCMFPhotoAlbum(圖片資料)、ZWiki ZAAPluginsZattachmentAttribute(附件)、PloneExFilePloneLoginHistory(登錄歷史)、 PlonePopoll(調查)、WhoOnline(在線統計)、MxmCounter(訪問統計)等。
4.3.2  安全及權限設置
有了完備的第三方產品后,整個系統的功能基本實現,為了能符合硬件系統機構的要求,每位員工能協同工作,Plone為用戶提供了文件夾的角色分配。內容的所有者可以為其他用戶分配角色,即可使多用戶對內容進行管理。
4.3.3  系統的應用
通過對Zope/Plone內容管理系統的合理配置,搭建了一個穩定、高效、安全的科技信息網,如圖6

6 科技信息網
5  結束語
著企業經營模式的變化和技術的不斷發展,從內容管理誕生到今天,關鍵技術的研究側重于支撐內容管理平臺的核心技術研究,主要包括XML和元數據技術、工作 流管理技術、應用集成技術以及數據檢索和挖掘技術。Zope/Plone內容管理系統作為開源項目,正適應內容管理關鍵技術的發展要求,筆者嘗試為企業或 部門建立一個穩定、高效、安全的內容管理系統--科技信息網。通過基于內容管理技術的科技信息網可以有效管理企業的現有智力資產,保持企業的核心競爭力; 建立學習平臺,不斷提供員工的素質,提升企業的素質;減少重復勞動,工作都可以在此前積累的基礎上繼續進行,避免員工或組織內的重復勞動;建立協同工作平 臺,提高工作效率。

參考文獻
[1] (美)H.M.Deitel,P.J.Deitel,J.P.Liperi,B.A.Wiedermann著,周靖譯,《Python編程金典》,清華大學出版社,20036
[2] (美)Roger S.Pressman著,梅宏譯,《軟件工程-實踐者的研究方法》第五版,機械工業出版社,20033
[3] 王詠剛,《Web開發技術史話》,《程序員》2004年第五期
[4] 新華社待編稿庫項目組,《運用內容管理,整合信息資源》,《中國傳媒科技》2004年第五期
[5] 韓嘯、曹輝,《內容管理的關鍵技術》,《中國傳媒科技》2004年第五期
[6] http://www.cmswire.com
[7] http://www.zope.orgZope官方網站),The Zope Book (2.6Edition)
[8] http://www.ZopeChina.comZope中國網站)
[9] http://www.plone.orgPlone官方網站),The Plone Book (2.0 Edition)

8.2 Zope/Plone內容管理系統的探討與應用

比較對象:
1. drupal 6.1
2. joomla!1.51
3. Mambo 4.6.1
4. PHP Nuke 6
5. Plone 3.0
6. Xoops 2.0.18

http://www.ncnynl.com/xoops2016u/modules/article/view.article.php/c2/98/p0

結論

優勢:

    1)基本上不用二次開發,直接就能用,這點不錯。不像基于JAVA的一些開源CMSOpenCms之流背著CMS的名字實際上要開發的東西挺多的。

劣勢:

1)數據庫采用ZODB數據庫,它與關系型數據庫如何交換數據需要花精力進一步研究。

2)雖有漢化包,但打上了潤普公司的圖標,礙眼,不爽。

3)國內支持plone的域名比較少見,要想玩,我還得自己在家建個服務器,機器24小時開著太吵睡不著覺不現實。

4) 是基于python的,雖然看了一下也不算難,但畢竟不是平時工作用的語言,不用它過兩天就忘記了,所以得持續投入精力,真正要用它這點得考慮。