为给定的域类自动生成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:+规范化空白没有太多样板文件的常用表单,同时允许更深入的
定制。
内容:
在开始使用脚手架之前,我们必须创建要使用的内容:
>;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")
>;
>;
<;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")
>;
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
----
-初始版本