“dolmen.content”的crud表单和操作

dolmen.forms.crud的Python项目详细描述


添加视图

dolmen.forms.crud 为"添加"提供了一个抽象 行动。它允许在容器层和手柄处插入 命名和持久性。更明确地说,它是一个命名适配器 将查询添加表单,检查约束,选择名称(使用 最后,如果一切顺利,把它加到 语境:

基本添加视图在框外注册为命名可遍历的 名为"add"的适配器。它使用以下模式: ++添加++工厂名称。 工厂名称 必须是 dolmen.content.ifactory 组件。

我们首先创建一个容器,在其中测试添加视图:

>>> import dolmen.content
>>> from dolmen.forms.crud.tests import Sietch

>>> sietch = Sietch()
>>> dolmen.content.IContent.providedBy(sietch)
True

>>> from zope.site.hooks import getSite
>>> root = getSite()
>>> root['sietch'] = sietch

创建容器后,添加视图应该可用,并且 可操作。让我们快速浏览一下:

>>> from zope.component import getMultiAdapter
>>> from zope.publisher.browser import TestRequest
>>> request = TestRequest()
>>> addingview = getMultiAdapter((sietch, request), name='add')
>>> addingview
<dolmen.forms.crud.addview.Adder object at ...>

添加视图组件显式地检查安全需求 在工厂里。为了测试这种行为,我们设置了两个 账户。"zope.manager"在 "zope.manfred"只有"zope.view"凭据。我厂 显式要求"zope.managecontent"权限 打电话。让我们尝试使用manfred来访问它:

>>> import zope.security.management as security
>>> from zope.security.testing import Principal, Participation

>>> manager = Principal('zope.manager', 'Manager')
>>> manfred = Principal('zope.manfred', 'Manfred')

>>> security.newInteraction(Participation(manfred))
>>> addingview.traverse('fremen', [])
Traceback (most recent call last):
...
Unauthorized: <class 'dolmen.forms.crud.tests.Fremen'> requires the 'zope.ManageContent' permission.

>>> security.endInteraction()

曼弗雷德没有被授权,但是经理应该能够 要访问添加视图:

>>> security.newInteraction(Participation(manager))
>>> addingview.traverse('fremen', [])
Traceback (most recent call last):
...
NotFound: Object: <dolmen.forms.crud.tests.Sietch object at ...>, name: 'fremen'

添加视图可用于我们的项目。不过,因为我们没有附加表格 注册后,如果尝试访问 当前工厂。

让我们创建并注册一个非常基本的通用crud 添加表单:

>>> import dolmen.forms.crud as crud
>>> class AddForm(crud.Add):
...     '''Generic add form.
...     '''

>>> import grokcore.component
>>> grokcore.component.testing.grok_component('addform', AddForm)
True

>>> addform = addingview.traverse('fremen', [])
>>> addform
<dolmen.forms.crud.tests.AddForm object at ...>

当我们走向工厂时,我们的addform被返回 "弗里曼"。

<>完美。我们的添加视图已经可以使用了。在测试addform之前 本身,让我们尝试一下 add 方法:

>>> from dolmen.forms.crud.tests import Fremen

>>> naib = Fremen()
>>> added_item = addingview.add(naib)
>>> added_item
<dolmen.forms.crud.tests.Fremen object at ...>

创建的内容已正确定位并持久化:

>>> added_item.__name__
u'Fremen'
>>> added_item.__parent__ is sietch
True

事实上,一个iadding组件应该总是 可定位的您可以方便地访问位置信息:

>>> addingview.__parent__
<dolmen.forms.crud.tests.Sietch object at ...>
>>> addingview.__name__
u''

add 方法检查是否遵守了约束。如果 容器已定义限制,或者如果某个接口协定是 违反,我们会得到一个错误:

>>> from dolmen.forms.crud.tests import Harkonnen

>>> rabban = Harkonnen()
>>> addingview.add(rabban)
Traceback (most recent call last):
...
InvalidItemType: (<...Sietch object at ...>, <...Harkonnen object at ...>, (<InterfaceClass dolmen.forms.crud.tests.IDesertWarrior>,))

adding视图的 add 方法可以从addform调用以委托 添加操作。泛型添加视图已经处理了 命名和持久化等操作。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaSpringbean已创建但未自动连接   java LibGDX游戏在三星Galaxy Grand Prime上结束   如何在Java中列出字符串句子中所有匹配条件的单词   java在Recyclerview中使用“putExtra”传递数据   java从一个特定的数组中提取特定的JSON对象,以便在Android中通过一个意图放入另一个活动   java需要使用IntelliJ和设置项目SDK的帮助   java springcontextindexer和Swagger 3   java使用indexOf和substring计算数字   java使用xml解析在word文档中查找隐式分页符   在添加<context:componentscan basepackage=“com.young.user”/   java无条件更改JTable单元格的背景色   选择列表中的java调用oracle函数:节点无数据类型   java如何添加缓冲图像作为JFrame的背景,然后在此图像上添加面板?   java Javadoc找不到用scala编写的类   java连接到文件共享程序的IP地址   java将数组元素加载到集合中   Tomcat中的java servlet、过滤器和线程   非Bean对象中的java EJB CDI注入?   java与println和printf的不同舍入