为给定的域类自动生成crud表单。

megrok.scaffold的Python项目详细描述


简介:脚手架允许您为模型自动生成表单。我们的目标是创建
没有太多样板文件的常用表单,同时允许更深入的
定制。

内容:

在开始使用脚手架之前,我们必须创建要使用的内容:

>;gt;类imammoth(接口):
…name=schema.textline(title=u"name")
…age=schema.int(title=u"age")

>>>>类猛犸象(模型):
…农具(imammoth)
…name=schema.fieldproperty.fieldproperty(imammoth['name'])
…age=schema.fieldproperty.fieldproperty(imammoth['age'])

>>>;类herdcontainer(容器):
…通过

现在我们要做的就是创建一个控制器:


用几行代码创建整个应用程序
grok.context(herdcontainer)

…脚手架(猛犸象)

就这样。我们有一个add form、一个edit form、display‘form’和一个list
视图。启用删除后。

让我们验证一下。

grokking和查询
---------


;>;>;从zope.publisher.browser导入testrequest
>;>;request=testrequest()
>;>;herd=herdcontainer()
>;>;getrootfolder()['herd']=herd
>;>;manfred=mammoth()
>;>;herd['manfred']=manfred

>;>;从zope.component import getmulitapter
>;>editform=getmulitapter((manfred,request),name="edit")

>;<;editform'edit'>;
>;<;html xmlns="http://www.w3.org/1999/xhtml">;
<;body>;
<;div id="edit mammoth"class="scaffold edit">;
<;form action="http://127.0.0.1"method="post"
class="edit form"enctype="multipart/form data">;


>;>;displayform=getmultiadapter((manfred,request),name="index")
>;>;displayform
<;displayform'index'>;

>;>;addform=getmultiadapter((herd,request),name="addmammoth")
>;>;addform
<;addform'addmammoth'>;

>;>;listform=getmultiadapter((herd,request),name="listmomoth")
>;>;listform=getmultiadapterm
<;listform'listmomoth'>;


布局集成
---------


首先,让我们注销以前的表单以重新启动它:从zope.component导入getglobalsitemanager
>;>;从zope.publisher.interfaces.browser导入ide来自zope的faultbrowserlayer
>;>;接口导入由
>;>;sm=getglobalsitemanager()
>;>;def unregister\u views()实现:
…done=sm.unregisteradapter(无)(实现者(庞大),
…idefaultbrowserlayer),接口,'edit')
…done=done和sm.unregisteradapter(none)(由(mammoth)实现,
…idefaultbrowserlayer),接口,'index')
…done=done和sm.unregisteradapter(none)(由(herdcontainer)实现),
…idefaultbrowserlayer),接口,'addmammoth')
…done=done和sm.unregisteradapter(none)(由(herdcontainer)实现),
…idefaultbrowserlayer),接口,'listmomoth')
…返回完毕
>;>>取消注册视图()
正确

grok.name('mylayout')
…grok.context(接口)

…def render(self):
…返回u"一个简单的布局\n%s"%self.view.content()
>;>grok_组件('mylayout',mylayout)
true


grok.context(herdcontainer)

…scaffold(mammoth,aspage=true)

>;>grok_组件('mammothcontroller,mammothcontroller)
true
>;>editform=getmulitapter((manfred,request),name="edit")
>;print editform()
一个简单的布局
<;div id="edit mammoth"类=。scaffold edit">;
<;form action="http://127.0.0.1"method="post"
class="edit form"enctype="multipart/form data">;



>自定义
===


可以使用传递给scaffold指令的参数配置视图的名称,例如::

>;>>级猛犸象控制器(控制器):
…grok.context(herdcontainer)

…scaffold(mammoth,addname='add',editname='edit',displayname='index',listname='index')


name=schema.textline(title=u"mammoth's name")

>>gt;类mammoth控制器(控制器):
…grok.context(herdcontainer)

…scaffold(add=mammoth,edit=imammoth,list=ilistmmoth,display=imammoth)


可以很容易地禁用视图的自动注册::

>gt;类mammoth controller(controller):
…grok.context(herdcontainer)

…脚手架(mammoth,list=false)

grok.context(herdcontainer)

…scaffold(mammoth,list=ilistmmoth,list name='index',edit=false,aspage=true)

r/>-无编辑表单

>;>unregister_views()
true
>;>grok_组件('mammothcontroller',mammothcontroller)
true
>;>getmultiadapter((herd,request),name="index")
<;listform'index'>;
>;edit form=getmultiadapter((manfred,request),name="edit")
回溯(最近一次调用):

componentlookuperror:

操作
----


每个表单都有这些常见操作的子集:"添加"、"编辑"、"应用"、"删除"。
有些可以使用诸如"允许编辑"和"允许删除"。

grok.context(herdcontainer)

…脚手架(猛犸象,listname='index')

…允许删除=false

…@操作("取消")
…def cancel(self,**数据):
…通过

…list_actions=controller.list_actions.copy()

…@操作("导入",列出操作)
…def do_import(self,**数据):
…self.redirect(self.url(self.context,"导入视图")

>;>unregister_views()
true
>;>grok_组件("mammothcontroller",mammothcontrolle)r)

>;>listform=getmultiadapter((herd,request),name="index")
>;>;>print listform();doctest:+规范化空白
1
<;input type="submit"class="button"value="import"name="actions.import"id="actions.import">;

security
==

默认情况下,注册的视图没有权限集。若要更改,请使用megrok中的
megrok.scaffold的"require"指令::

>;>>来自megrok.scaffold import require as scaffold

>;>类mammothcontroller(controller):
…grok.context(herdcontainer)

…脚手架(猛犸象)
…scaffold庘u require(add='zope.managecontent',edit='zope.managecontent')

==


>请参阅interfaces.py模块。


changelog
==

<0.3
----

-列表视图表现在使用字段标题作为列标题
-修复了控制器默认添加方法上的错误(缩进错误)
-更改了cocontroller初始化的签名
-删除了megrok.layout依赖项。现在必须包括megrok.layout或grokcore.layout。
-控制器现在注册为实用程序



<0.2
----


-布局页的固定模板(aspage=true)
-修复了小错误

<0.1
----

-初始版本

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

推荐PyPI第三方库


热门话题
使用Selenium Java查找筛选器窗格“铅笔图标”的元素时出现问题   分布式缓存l2上使用infinispan和hibernate的java连接锁   使用Java的DOM XML API解析XML中的符号和   java是解析和操作字符串的有效方法   java发布NewRelicMeterRegistry时如何过滤仪表   多维数组在java中读取文件后将数据值分组   java如何将httpClient配置为jsoup   java BreakIterator在Android中是如何工作的?   找不到maven GAE类:原因:java。lang.ClassNotFoundException应用程序标识cRedential$AppenginecRedential包装   Jlabel调整java大小   调试如何在VScode中的java类依赖项中设置断点   java正在获取文件夹名,而不是。mp3文件{Android}   java如何将从DiffieHellman类生成的AES密钥添加到使用该密钥的类