Dexterity开发手册:第三章开发环境搭建
Dexterity开发手册:第三章开发环境搭建
http://www.315ok.org/blogfolder/371
http://www.315ok.org/logo.png
Dexterity开发手册:第三章开发环境搭建
Dexterity开发手册:第三章开发环境搭建
1. Buildout 配置 [align=left]本节介绍怎样设置一个开发buildout[/align]为了使用 Dexterity必须引入 plone.app.dexterity 包支持。为了保障各种包之间协同工作,不出现版本冲突,你需要扩展 Dexterity known good set (KGS) ,取得各个包的正确版本来使得Dexterity正常运行。最简单的办法是用一个buildout配置来指明某些具体的版本。一个最小可执行的buildout配置可以参见 installation how-to.。本章,我们将在此最小配置的基础上扩展添加一些开发工具。In this section, will expand upon this to add some development tools.
要创建这么一个buildout配置文件,可以在标准的plone配置文件的基础上,做下述修改。也请你注意,你应该更新Plone和Dexterity的恰当版本:
2. 创建包 [align=left]为我们的内容类型创建一个包,通常情况下,我们的内容类型包和我们的皮肤包以及其他定制包是分离的。在前一节中,我们演示了怎样将src/目录下的包汇入buildout配置,我们的样例包 example.conference。你能在这里in the Collective repository找到该包的最新版。
[/align]为了创建一个新包,我们可以采用 ZopeSkel 和 plone template。关于如何安装ZopeSkel,请参考: this how-to 。
Next, we will normalise the code created by paster, mainly by removing things we don't need.
首先,我们来编辑setup.py 添加 plone.app.dexterity 作为依存性,指定这个包作为一个 z3c.autoinclude plug-in。这个确保我们不要另外再配置调入这个包(仅Plone3.3及以后的版本有效)。我们也添加一个依存性collective.autopermission, 这个允许我们接下来定义自定义的权限。
我们可以安全删除这个 paster plugin 输入点和 paster_plugins 行,在此,我们不需要这些。
接下来,我们grok 这个包以便构造和注册schemata, views, forms 等等。
最好我们注册一个GenericSetup 配置文件使得该类型可以被安装。
这个配置文件要求一个目录 profiles/default. 你可以在configure.zcml文件所在的文件夹建立这个 profiles 目录,在default目录下,添加一个metadata.xml的文件,编辑该文件用下面的内容填充:
英文原版
[align=right]《《第二章 设计内容类型 第四章 schema驱动内容类型》》
[/align]
要创建这么一个buildout配置文件,可以在标准的plone配置文件的基础上,做下述修改。也请你注意,你应该更新Plone和Dexterity的恰当版本:
[buildout]
extensions = mr.developer buildout.dumppickedversions
unzip = true
parts = instance omelette zopepy test roadrunner
extends =
http://good-py.appspot.com/release/dexterity/1.0.3?plone=4.1
versions = versions
develop =
# If you're not using mr.developer to manage develop eggs, list eggs here. Globs OK.
# src/*
sources = sources
auto-checkout =
example.conference
[instance]
recipe = plone.recipe.zope2instance
user = admin:admin
http-address = 8080
debug-mode = on
verbose-security = on
eggs =
Plone
example.conference
# development tools
plone.reload
Products.PDBDebugMode
zcml =
[omelette]
recipe = collective.recipe.omelette
eggs = ${instance:eggs}
[zopepy]
recipe = zc.recipe.egg
eggs = ${instance:eggs}
interpreter = zopepy
scripts = zopepy
[test]
recipe = zc.recipe.testrunner
eggs =
example.conference
defaults = ['--exit-with-status', '--auto-color', '--auto-progress']
[sources]
example.conference = svn https://svn.plone.org/svn/collective/example.conference/trunk你将看到我们引用了一个名叫example.conference的包,稍后我们将创建它。让我们首先来自上之下解释这个buildout配置。- 我们定义两个buildout扩展, mr.developer, 用于帮助管理我们的代码;which helps us manage our code, and buildout.dumppickedversions, 用于帮助跟踪我们buildout文件引用的各个模块的版本信息,这些版本信息便于用来建立一个可以重复的biuildout配置。如果你不熟悉 mr.developer,你应该看看他的相关文档,特别是了解下 ./bin/develop 命令的使用。
- 我们扩展Dexterity1.03的配置以便在Plone4.1平台运行。你应该注意恰当调整你的Plone版本。这个扩展配置允许Dexterity更新某些Plone里面的包。你也应该关注the Dexterity project page 以便发现最新的有效版本。The known good set URL 将给我们最新的Dexterity包集合版本,我们自建的example.conference产品依赖Plone.app.dexterity。这个 versions = versions 行告诉buildout KGS集合由外部URL来定义。
- 我们通过在[sources] 段中定义sources = sources来告诉 mr.developer我们的包的来源在哪里。我们也告诉mr.developer自动检出 example.conference包,这将从版本服务器url中检出,放置在src/ 目录是确保该包被配置为一个开发egg。
- 如果你还没有一个版本服务器,你可以将你的包放在 src/ 目录。这个 develop = src/* 行将正确提取这些开发包。注意:用了 mr.developer后,我们注释掉这一行,以避免同一个开发egg被调入两次。
- 我们配置一个标准的Zope instance并且加两个开发工具到这个 eggs行:
- 当有错误发生时,Products.PdbDebugMode 将弹出pdb 调试shell。
- plone.reload 让你不必重启服务器来重新装载配置文件,以便使得更改立即生效,你可以去到 localhost:8080/@@reload 来使得更改立即生效,详细文档查看 plone.reload 。
- 我们也添加 Plone 核心egg 和我们自己的新建开发包。
- 我们配置一个用于Plone实例的标准的Zope 2 server。
- 我们配置 collective.recipe.omelette s以便在parts/omelette 目录生成一个链接集合,指向当前Plone实例空间所有有效代码。如果你使用Windows系统,你必须安装l junction.exe 才能使得这个工作,详细信息参考 omelette documentation 。
- 我们将安装一个testrunner。这将生成一个bin/test 命令,用来运行我们的测试。 注意: 仅仅直接列出在这儿的包对test runner有效。如果你想为一个包运行test runner,你需要将这个包在[test]部分的eggs选项中直接列出。
2. 创建包 [align=left]为我们的内容类型创建一个包,通常情况下,我们的内容类型包和我们的皮肤包以及其他定制包是分离的。在前一节中,我们演示了怎样将src/目录下的包汇入buildout配置,我们的样例包 example.conference。你能在这里in the Collective repository找到该包的最新版。
[/align]为了创建一个新包,我们可以采用 ZopeSkel 和 plone template。关于如何安装ZopeSkel,请参考: this how-to 。
下面演示怎样从最简单的Plone插件框架开始,一步步适配它采用Dexterity,如果采用zopeskel.dexterity包自带的工具zopeSkel,将能更快地生成Dexterity框架到立即可用的状态。我们在src/ 目前下运行下面命令:
$ paster create -t plone example.conference如果你用这个模板,确认在命令行配置中你指定了名称空间 (example) 和包名 (conference)匹配这个egg名称 (example.conference) 。当问是否创建一个 Zope 2 产品时,回答False;问是否该产品是 zip-safe时,回答False,paster命令将为我们创建代码,接下来我们要规范下由paster命令创建的代码,删除我们不需要的部分。Next, we will normalise the code created by paster, mainly by removing things we don't need.
首先,我们来编辑setup.py 添加 plone.app.dexterity 作为依存性,指定这个包作为一个 z3c.autoinclude plug-in。这个确保我们不要另外再配置调入这个包(仅Plone3.3及以后的版本有效)。我们也添加一个依存性collective.autopermission, 这个允许我们接下来定义自定义的权限。
我们可以安全删除这个 paster plugin 输入点和 paster_plugins 行,在此,我们不需要这些。
from setuptools import setup, find_packages
import os
version = '1.0a1'
setup(name='example.conference',
version=version,
description="Example accompanying http://plone.org/products/dexterity/documentation/manual/developers-manual/",
long_description=open("README.txt").read() + "\n" +
open(os.path.join("docs", "HISTORY.txt")).read(),
# Get more strings from http://www.python.org/pypi?%3Aaction=list_classifiers
classifiers=[
"Framework :: Plone",
"Programming Language :: Python",
"Topic :: Software Development :: Libraries :: Python Modules",
],
keywords='plone dexterity example',
author='Martin Aspeli',
author_email='optilude@gmail.com',
url='http://plone.org/products/dexterity',
license='GPL',
packages=find_packages(exclude=['ez_setup']),
namespace_packages=['example'],
include_package_data=True,
zip_safe=False,
install_requires=[
'setuptools',
'Plone',
'plone.app.dexterity',
'collective.autopermission',
],
entry_points="""
[z3c.autoinclude.plugin]
target = plone
""",
)接下来我们编辑configure.zcml 并且添加下面的配置:<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:grok="http://namespaces.zope.org/grok"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
i18n_domain="example.conference">
<!-- Include configuration for dependencies listed in setup.py -->
<includeDependencies package="." />
<!-- Grok the package to initialise schema interfaces and content classes -->
<grok:grok package="." />
<!-- Register an extension profile to make the product installable -->
<genericsetup:registerProfile
name="default"
title="Conference management"
description="A Dexterity demo"
directory="profiles/default"
provides="Products.GenericSetup.interfaces.EXTENSION"
/>
</configure>这里我们首页自动调入列在setup.py的install_requires段的所有包,这个自动调入功能是z3c.autoinclude模块的一部分功能,只对Plone3.3及以后的版本有效。一个代替办法是为每一个包的依存性加一行如: <include package="plone.app.dexterity" />。接下来,我们grok 这个包以便构造和注册schemata, views, forms 等等。
最好我们注册一个GenericSetup 配置文件使得该类型可以被安装。
这个配置文件要求一个目录 profiles/default. 你可以在configure.zcml文件所在的文件夹建立这个 profiles 目录,在default目录下,添加一个metadata.xml的文件,编辑该文件用下面的内容填充:
<metadata>
<version>1</version>
<dependencies>
<dependency>profile-plone.app.dexterity:default</dependency>
</dependencies>
</metadata>这个给出的是配置文件版本号(不同于在setup.py文件中定义的包的版本号)这个配置文件版本号用于将来定义包的更新步骤。接下来申明 plone.app.dexterity 包在我们这个包被安装时,也应该被安装,如果需要,还可以加其他配置信息。至此,我们应该能去到buildout根目录,运行如下命令:$ python2.4 bootstrap.py
$ ./bin/buildout这个buildout配置过程应该能配置好 Plone, Dexterity 和 example.conference 包在我们的Plone实例空间。现在我们准备添加内容类型。英文原版
[align=right]《《第二章 设计内容类型 第四章 schema驱动内容类型》》
[/align]