2

如果您有这样的控制器方法:

@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 请求的一部分调用时才合适。我错过了什么?

4

1 回答 1

1

我通常通过一个“worker”方法来解决这个问题,该方法查询数据库、转换结果等,以及一个单独的公开方法,以及所有必需的装饰器。例如:

# The _artists method can be used from any other method
def _artists(self, action, artist_id):
    artists = session.query(model.Artist).all()
    return dict(artists=artists)

@expose("json")
#@identity.require(identity.non_anonymous())
# error handlers, etc.
def artists(self, action="view", artist_id=None):
    return self._artists(action=action, artist_id=artist_id)
于 2009-01-18T00:28:06.277 回答