Fed*_*les 5 python google-app-engine web-applications
我正在尝试在Python中实现类似Rails动态查找器(用于webapp/GAE).动态查找器的工作方式如下:
Person类有一个名为"find_by_name"的方法,它接收名称并返回查询结果:
 @classmethod
 def find_by_name(cls, name):
    return Person.gql("WHERE name = :1", name).get()
我不想为每个属性编写类似的方法,而是希望像Ruby的method_missing那样允许我这样做.
到目前为止,我已经看过这两篇博文:http://blog.iffy.us/?p = 43和 http://www.whatspop.com/blog/2008/08/method-missing-in-python. cfm,但我想听听"最合适"的做法.
这里真的没有必要使用GQL - 它只是使问题复杂化.这是一个简单的实现:
class FindableModel(db.Model):
  def __getattr__(self, name):
    if not name.startswith("find_by_"):
      raise AttributeError(name)
    field = name[len("find_by_"):]
    return lambda value: self.all().filter(field, value)
请注意,它返回一个Query对象,您可以调用.get(),.find()等; 这是多功能的,但如果你想要,你当然可以让它只返回一个实体.