“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第三方库


热门话题
java JList侦听器找不到符号   多点触摸跨平台java应用程序(Windows、Mac和Linux(Ubuntu)(可能是Android))   在UnitTest中找不到java类加载器资源   java当我尝试在Eclipse中运行我的minecraft mod时,我总是遇到这个错误,这是什么意思?   内部有一个同步块的静态方法,在java中阻止整个类?   不支持java操作:具有BillableStatus的费用在采购中应具有AccountBasedExpenseLineDetail行的CustomerRef   java运行时常量池GC集合   java无法解析配置“:app:\u debugApk”的所有依赖项。找不到名为“default”的配置   在GCP计算引擎中托管Neo4j的java   java如何从BroadcastReceiver更新片段选项卡?   线程“main”组织中的java异常。冬眠注释异常:@org。冬眠注释。表引用未知表:ProductForPractice   在Java/Groovy中嵌入处理   java Android REST教程/示例项目   java我可以在同一测试中在一个模拟器上启动应用程序,在另一个模拟器上启动移动浏览器吗?   java如何更改通知横幅的方向?   安卓 Java帮助实现Firebase授权   if else之后的rs.next()中出现java错误?