代码之家  ›  专栏  ›  技术社区  ›  vhallac

挂架:在模型层验证数据

  •  3
  • vhallac  · 技术社区  · 14 年前

    为了我的实验,我选择了 Ruby on Rails Tutorial . 我已经在Rails中完成了应用程序,现在,我已经开始在Pylons中完成它。我已经到了第六章,没有太多戏剧性的内容(考虑到在那之前大部分是静态页面,这并不奇怪)。现在,我需要为用户实现模型,并将验证逻辑添加到模型中。第一部分是直截了当的,但我在第二部分卡住了。

    长话短说(为TLDR突出显示): 有没有一个基础设施可以比建议的SQLAlchemy/formencode对更紧密地将表单与模型联系起来? 有了这两个,我只能在模型层添加断言。事实上,这不是真的,我可以尝试用自定义代码来弥合差距,但它看起来确实有很多代码,而且很难纠正。所以,我认为在尝试扩展我不太理解的代码之前,最好先四处询问一下。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Rick    14 年前

    所以首先,我不知道有什么内置的方式。表单级别的验证是有意义的,因为不同的表单/视图可能访问同一个模型,并且需要根据当前用户、情况(基于时间)等执行不同的验证。所以我是那些将验证作为控制器级别的一部分的人之一。

    现在关于它是大量代码的观点,我认为您可以很容易地创建formencode方案作为SqlAlchemy(SA)模型的一部分,然后只需钩住object save()的SA事件并在其中运行验证方案。或者编写一个包装函数,用于在执行保存之前填充初始对象。所以而不是:

    person = Session.Query(People).get(10)
    person.fname = request.params['fname']
    person.lname = request.params['lname']
    

    你会做一些更像:

    person = Session.Query(People).get(10)
    person.populate(request.params)
    

    它将遍历对象中的参数和列来设置它,同时进行验证。

        2
  •  1
  •   Brighid McDonnell    14 年前

    SQLAlchemy为您提供了一些 basic validation decorators 当您使用class+mapper方法时。基础设施是否足以满足您的需求?

    另外,请记住,对于给定的表,应用程序可能不必始终遵循相同的验证规则。