grok的crud表单,使用z3c.form

megrok.z3cform.crud的Python项目详细描述


积垢

此模块为您提供了一个抽象基类,用于生成CRUD表单。 默认情况下,这些表单提供对象的表格视图,其中 对象的属性可以就地编辑。请参考 ICrudForminterface了解更多详细信息。

>>> from megrok.z3cform.crud import crud

表单注册

型号

我们建立了一些模型作为表单上下文:

>>> import grokcore.component as grok
>>> from zope import interface, schema

>>> class IPerson(interface.Interface):
...    name = schema.TextLine(title=u"Name")
...    age = schema.Int(title=u"Age")

>>> class Person(grok.Context):
...    grok.implements(IPerson)
...    name = schema.fieldproperty.FieldProperty(IPerson['name'])
...    age = schema.fieldproperty.FieldProperty(IPerson['age'])
...
...    def __init__(self, name, age):
...        self.name = name
...        self.age = age

>>> class IPersonContainer(interface.Interface):
...    pass

>>> class PersonContainer(dict):
...    grok.implements(IPersonContainer)

在这次测试中,我们将人员的姓名作为 存储:

>>> storage = PersonContainer()
>>> storage['Peter'] = Person(u'Peter', 16)
>>> storage['Martha'] = Person(u'Martha', 32)

我们在megrok.z3cform.base的帮助下声明此表。它与Grok非常相似。视图:

>>> import megrok.z3cform.base as z3cform

>>> class TestForm(crud.CrudForm):
...    grok.context(IPersonContainer)
...
...    update_schema = IPerson
...
...    def get_items(self):
...        return sorted(storage.items(), key=lambda x: x[1].name)
...
...    def add(self, data):
...        person = Person(**data)
...        storage[str(person.name)] = person
...        return person
...
...    def remove(self, (id, item)):
...        del storage[id]

摸索和查询

我们让grok注册组件:

>>> grok.testing.grok_component('form', TestForm)
True

现在,我们可以正常查询:

>>> from zope.publisher.browser import TestRequest
>>> request = TestRequest()

>>> from zope.component import getMultiAdapter
>>> myform = getMultiAdapter((storage, request), name="testform")

>>> myform
<TestForm object at ...>
>>> print myform()
<form action="http://127.0.0.1" method="post"
        enctype="multipart/form-data" class="form-testform">
...

更改日志

0.1

  • 初始版本

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

推荐PyPI第三方库


热门话题
java如何删除列表中的重复项并将列表复制到另一个列表中   Java如何在非UI应用程序中检测tab键按下?   java无法在未调用Looper的线程内创建处理程序。警报对话框线程上的prepare()   java Jaxb将XML转换为ElementNSImpl类型,而不是正确的类型   基于java标记的过滤实现Firestore   我们可以使用Java和Eclipse使用YouTube分析Api吗?   JavaSpring注释在多个选项卡中同时打开多个视图   java Hibernate不使用JBOSS检索数据   矩阵如何从Apache Commons数学Java库中找到伪逆   对象Java打印“null”作为字符串引用!=使无效   java中的图形慢映射   java用户界面:操作栏和上下文操作栏,新趋势   java Infinispan,版本化操作返回不正确的结果   java调整保存在父JFrame中的JInternalFrame的大小,并且该父JFrame使用ComponentMover API注册   java如何防止会话属性在服务器上持久化?   java如何为SpringBoot 2创建自定义嵌入式servlet容器   使用Robolectric进行单元测试时,在片段类内调用getString()时发生java IllegalStateException