如何创建 Python Pyramid 视图类而不需要为每个方法指定“名称”
Posted
技术标签:
【中文标题】如何创建 Python Pyramid 视图类而不需要为每个方法指定“名称”【英文标题】:Howto create Python Pyramid view class without need to specify 'name' for each method 【发布时间】:2012-07-06 09:41:01 【问题描述】:我的 Python Pyramid 项目中有几个视图类是通过 add_handler 添加的:
config.add_handler('export_index', '/export', handler=ExportViews, action='index')
class ExportViews(ConfigViewBase):
@action(request_method='POST', name='index',
request_param='ftp_export.form.submitted')
@action(request_method='POST', name='index', xhr=True, renderer='json',
request_param='ftp_export.form.submitted')
def ftp_export(self):
#process form
return
@action(request_method='GET')
def index(self):
return
是否可以这样做:
config.add_handler('export_index', '/export', handler=ExportViews)
class ExportViews(ConfigViewBase):
@action(request_method='POST',
request_param='ftp_export.form.submitted')
@action(request_method='POST', xhr=True, renderer='json',
request_param='ftp_export.form.submitted')
def ftp_export(self):
#process form
return
@action(request_method='GET')
def __call__(self):
return
所以当浏览器获取页面时调用了 __call__,当我在同一页面上发布表单时应该调用 ftp_export。现在我得到page not found error
谢谢。
【问题讨论】:
目前 pyramid_handlers 不支持此行为 【参考方案1】:您可以通过遍历来做到这一点。穿越岩石:)
class Root(object):
def __getitem__(self, name):
if name == "export":
return ExportSomething(self)
if name == "export_something_else":
return ExportSomethingElse(self)
class ExportSomething(object):
implements(IViewable, IExportable)
def view(self, request):
return "Hi"
def export(self, request):
return "something else"
@view_config(context=IViewable, request_method="GET")
def view_viewable(conext, request):
return context.view(request)
@view_config(context=IExportable, request_method="POST")
def export_exportable(conext, request):
return context.export(request)
然后你可以实现一堆ExportThis
和ExportThat
类,让它们实现IViewable
和IExportable
接口,让它们从Root.__getitem__
返回,一切都会神奇地工作。或者,如果您不需要多个导出器,您可以省略接口并将视图直接绑定到 ExportSomething
类。或者您可以在 getitem 中实例化 ExportSomething
的不同实例并使其...我不知道,查看/导出不同的文件/报告。
【讨论】:
如果在/export
你有出口,他可以做类似view_config(context=IExportable, name="fun")
的事情来匹配/export/fun
。遍历是非常棒的。
我还建议使用 view_defaults
和 view_config
而不是 pyramid_handler以上是关于如何创建 Python Pyramid 视图类而不需要为每个方法指定“名称”的主要内容,如果未能解决你的问题,请参考以下文章
编码的 UI 测试:创建多个单独的 UIMap 类而不只是多个部分 UIMap 类的原因是啥?
是否可以将方法添加到现有(内置)ActionScript Flash 类而不扩展它并创建一个新类?
如何在 Spring 中测试 @Configuration 类而不启动整个上下文?
如何在 JsDoc(VS Code / IntelliSense)中引用另一个文件中的类而不直接导入?