转:Zope tutorial 学习笔记


Zope tutorial 学习笔记
推荐好文   评价    出处:ringkee.com 作者:Jims 更新时间:2007-09-01  
原文
   
Abstract
以下笔记是我看zope tutorial时记录下来的,该指南是zope系统自带的,用来做为入门教材很好。
Table of Contents
1. my home page
2. 建立网站通用信息
3. 显示对象内容
4. 显示和上传图片
5. 为访问者提供个性化信息
6. 信息反馈
7. 连接数据库
1. my home page
Zope
的一个主要特点是可在线编辑,它提供一个管理界面(zmi),位置在http://localhost/manage,我们可以通过浏览器登录进来,进行
系统管理和开发。zmi管理界面左面有一个导航器,操作简单明了。右面是对象列表和相关属性。右上方有一个对象添加列表,我们可以通过该功能添加你自已的
对象。
为了进行测试,我新建了一个home文件夹。方法是在右上面的“select type to
add...”框中选择“Folder”对象,在新建窗口填上id和title,id是一定要填的,代表你添加的对象的标识,title是可选的,只是代
表这个对象的一种属性。Create public interface和Create user
folder也是可选的,如果选择了话就会在你新的文件夹中自动建一个名为index_html的DTML文档和一个acl_users文件夹。前者相当
于该目录的默认页面,后者是该文件夹的用户管理文件夹。在这里我们在id栏上填上“home”,title栏也填上“home”,Create
public interface和Create user folder就不选了。好了,现在我们就有了一个用于学习的目录了。
现在 zope最新的页面语言是zpt(zope page template),所以我用zpt来做我的home
page。进入home文件夹,在“select type to add...”中选择“page
template”对象进行添加。在新建页面的id栏上填上“home.html”,title栏上填上“zope home
page”,按“add”完成对象添加。现在home目录中就有了一个home.html的文件了,单击可以打开进行编辑。在正文栏中输入以下代码

               

Welcome to title,       
this my zope tutorial,I like zope,I like python too.
another test page in my zope site is zoo

zoo                               
   
        
            


            
            
显示logo图片
            
        
        
            


            
            
用"template/title"值(zope home page)替换title。
            
        
        
            


            
            
建立一个到zoo目录的链接。
            
        
   
2. 建立网站通用信息
在网站上,可能有一些信息每页都会有的,比如你的logo、邮件地址、标题等。如果每个页面都要重写一次就很麻烦,我们可以定义一个标准的模板文
件,在每个需要显示的页面上包含它就可以。在zope中,这个模板文件standard_template.pt。现在我们设置一个邮件地址,并使它可在
每个页面显示,步骤如下:

  •    
    进入当前文件夹(home)的
    “Properties”标签,增加一个属性,名字(name)为“mail_link”,类型(type)为“string”,值(value)为
    “mailto:xxx@xxx.xxx”,最后点击添加(Add)完成。这样,你就建立了一个“mail_link”属性,这个属性可用于整个网站。
       

    •    
      增加一个模板文件,命名为“standard_template.pt”。文件内容如下:
         
         
         
          This is where the page's body text goes.
         
         
          mail
            webmaster
        

         
      现在我们就定义一个标准zope macro(page)。该宏的作用是显示“This is where the page's body text goes.”和一个到“mail_link”的链接“mail webmaster”。
         

    •    
      现在让我们在页而中使用这个macro。把下面的语名嵌入到你的页面中,就可以了。要看输出效果可按“test”标签。
          page
         
      3. 显示对象内容
      在zope中所有东西都是对象,例如文件夹、文件等。我们可以很方便地显示各对象的内容,下面这段代码可显示test文件夹内容,可以显示图片、文本文件等:
      title
        
        
        
        Sighting goes here
        
        
        

    •    
      通过objectValues属性可以获得对象的内容。
         

    •    
      tal:repeat可遍历对象列表,并定义对象列表变量。
         

    •    
      tal:context可显示变量内容。
         

    4. 显示和上传图片
    显示图片和上面的显示代码一样,上传图片的代码如下:
    title
    Upload a picture to the Elvis Photo Archive.
    File:
    Title:
    这里还牵涉到一个action.py脚本,用来执行添加图片文件的功能,脚本内容如下:
    """
    Create a new image in the photo archive folder.
    Then return a confirmation page.
    """
    folder=container['photo']
    folder.manage_addImage(id='', file=file, title=title)
    page=container['thanks.html']
    return page()
    把file和title两个参数填到parameter栏中,中间用逗号分隔。photo是存放图片的文件夹,文件夹的manage_addImage方法可在文件夹中添加jpeg、gif、png等图片;thanks.html是成功提交后重定向的页面。
    5. 为访问者提供个性化信息
    如果网站上有大量的信息,访问者就只会关心一些最新的内容,我们可以在显示信息时提示访问者哪些是新的内容。代码如下:
    title
    lastVisit">New
    Sighting goes here

    •    
      该代码首先定义一个变量lastVisit,代表最后的访问时间,值由lastVisit.py脚本的返回值赋值。
         

    •    
      tal:condition可用于测试。bobobase_modification_time()可得到对象的最后修改时间。如果最后修改时间大于最后访问时间,则显示粗体的New。
         

    lastVisit.py脚本内容如下:
    """
    Returns the time of the last visit as a DateTime object. Also sets
    records the current time in a cookie.
    """
    request = container.REQUEST
    if request.cookies.has_key('lastVisited'):
        # retrieve the last visit time from the cookie
        last=request.cookies['lastVisited']
    else:
        # there's no cookie so pick a time in the past
        last='1/1/1999'
    # convert the date string to a DateTime object
    last=DateTime(last)
    # finally set current time in the cookie
    request.response.setCookie('lastVisited', DateTime())
    # return time of last visit
    return last
    lastVisited为cookies,保存了最近访问的时间。DateTime()函数可获得当前的时间。
    6. 信息反馈
    如果你对网站有意见,我们可提供一个信息反馈的功能。访问者可在上面写意见,并把意见以邮件的形式发送到指定邮箱。

    •    
      首先,我们要建立一个mailhost对象,设置smtp服务器地址和端口。建立方法同建立文件一样,从右上角的对象添加列表选择MailHost进行添加。配置好smtp host和smtp port。
         

    •    
      现在zope已经可以发邮件了,现在我们编写一个action.py脚本来发邮件。脚本内容如下:
          """
      Sends email documenting an elvis sighting
      """
      # locate the mailhost
      mailhost=container['MailHost']
      # email message settings
      recipient='xxx@xxx.xxx'
      sender='xxx@xxx.xxx'
      subject='New Elvis Sighting'
      # format the email message
      message='Elvis was spotted by ' + name + ' in ' + location + '\n\n' + description
      # send the message
      mailhost.simple_send(recipient, sender, subject, message)
      # return a confirmation message
      page=container['thanks.html']
      return page()
         
      recipient为收件人地址,sender为发件人地址,subject为主题。我们调用mailhost的simple_send()方法来发送邮件。
         
      name, location, description三个参数要填在parameter栏中,以接收来自form中的值。
         

    •    
      最后用一个form来组合这些功能,代码如下:
          意见反馈表
      Your name:
      Sighting location:
      Describe the sighting:
         
      7. 连接数据库
      数据库在网站中作用是很重要的,所以zope也可与各种数据库连接,如oracle,SQL
      server,mysql等。在zope中,通过各种zope的(DA)模块与数据连接。zope本身包含一个数据库叫gadfly,它由python写
      成,具有SQL数据库的所有特征。下面以连接MySQL数据库为例讲解一下数据库编程方面的知识。有关数据库接口的安装调试请参考我的相关笔记。
      在Zope中连接MySQL数据库可按以下步骤

    •    
      首先要建立一个数据库连接对象,如果正确安装了ZMySQLDA,在ZMI右上角的对
      象列表中会有“Z MySQL Database
      Connection”对象。选中按添加,填上id和title,最重要的是第三行的数据库连接串。按“[+/-]database[@host[:
      port]] [user [password [unix_socket]]]”格式填好,如果是本地数据库可简化成“database user
      password”。按“Add”完成添加并马上连接到数据库。
         

    •    
      连接测试。我们可进入刚建立的数据库连接对象,在“status”栏可显示数据库连接是否打开。要进行测试按“test”标签,在中间空白的地方输入SQL查询语句,按“Submit Query”按钮提交,如果成功就可返回查询结果。
         

    •    
      连接成功后,我们就可建立各种Z SQL Method。例如我们想显示数据库中的内容,我们可以这样做:
         
         

    •         

      先建立一个Z SQL Method,命名为“select”(注意,如果当前目录没有建立一个数据库连接,是不能建立Z SQL
      Method的)。选择好“connection id”,在“Query Template”内输入“select * from
      test”。现在这个Z SQL Method就建立好了。
              

    •         
      建立一个模板页面,显示Z SQL Method的内容。模板页面内容如下:
              


               
                  
                    主题
                    作者
                    内容
                    回复
                    点击
                    最后回复
                  
                  
                    tal:content="item/topic">topic
                    author
                    context
                    revert_count
                    click_count
                    submit_last
                  
               
              

              
      tal:repeat标记遍历select的结果集,并把它赋值给item变量。
              
      tal:content显示item的内容。
              

       
       

    •    

      面举一个有参数传递的程序说明ZPT、Z SQL Method和Python
      Script之间是怎样进行通信的。该程序的作用是建立一个可提交到数据库的反馈表单。总共用到三个文件,一个叫submit的ZPT文件,用于显示表
      单;一个叫insert的Z SQL Method,用于执行数据库插入操作;一个叫insert.py的Python
      Script文件,用于接收ZPT的参数和执行Z SQL Method。三个文件的代码如下:
          ## submit ##
          head
         
          反馈表单
         
          Welcome to title
           发布新主题
           
             主    题:
             内    容:
            
            
           
           
         

          foot
         
         

    •         
      metal:use-macro是引用我head和footer两个宏,分别定义页头和页脚的内容。
              

    •         
      form定义一个表单,该表单一提交,将执行insert.py脚本,并把p_topic和p_cont两个参数传给该脚本。
              

       
        ## insert.py  ##
    # get sql method
    insert=container['insert']
    #get the max topic_id
    a=context.s_max_topic_id()
    if a[0][0]
       
       

    •         
      添加python脚本的方法同添加其它对象一样,从ZMI右上角的对象添加列表选中“Script(Python)”添加即可。为了接收表单提交过来的参数,该脚本需设置两个参数,这里分别是p_topic和p_cont。
              

    •         
      该脚本首先获得一个叫insert的Z SQL Method,然后把相关参数通过insert(xx=xx)传递给Z SQL Method。
              

    •         
      最后返回提交页面。
              

       
        ## insert Z SQL Method  ##
    insert into test (topic,author,cont,submit_last,topic_id)
      values(
    ,
    ,
    ,
    ,
    )
       
       

    •         
      在insert的参数栏内填上需从insert.py脚本中传递过来的参数topic,author,cont,submit_last,topic_id。(来源 www.iocblog.net)
              

    •         
      为确保语法有效,可按“test”标签测试。这时需手动填上参数,按“Submit Query”执行。
              

       
       
    好了,zope tutorial的内容就介绍在这里,这只是zope的入门,让大家对zope有一个大概的了解,如果要用zope进行开发还需要大量有关zope对象、API和python的知识。