【发布时间】:2010-10-02 00:55:45
【问题描述】:
如果你有这样的控制器方法:
@expose("json")
def artists(self, action="view",artist_id=None):
artists=session.query(model.Artist).all()
return dict(artists=artists)
如何从控制器类中调用该方法,并取回 python dict - 而不是 dict 的 json 编码字符串(这需要您将其从 json 解码回 python dict)。是否真的有必要编写一个函数来从模型中获取数据,并编写另一个函数来打包数据以供模板(KID、JSON)使用?为什么当你在同一个类中调用这个方法时,例如:
artists = self.artists()
您会得到一个 json 字符串,这仅适用于作为 HTML 请求的一部分调用该方法的情况。 我错过了什么?
【问题讨论】:
-
显然,这对于真正复杂的数据库查询来说更令人烦恼 - 不想在实用方法和控制器方法等之间重复所有这些。也不想拥有“无意义”的方法仅用于装饰现有的实用方法以供模板使用。
-
我实际上认为“毫无意义”的纯装饰方法恰恰相反——TG 中开箱即用的装饰器范围甚至可以使具有简单主体的方法变得非常强大。我还发现将逻辑拆分为对单元测试有用的工作函数。
-
对不起,通过装饰我不是指装饰器'@error_handler'等 - 而是代理方法,包装器方法,无论你想调用它们。我完全同意:TG 装饰器,它们非常强大且富有表现力。回复:单元测试 - 是的,这确实是一个好点。
标签: python json turbogears