V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
banxi1988
V2EX  ›  Python

数据模型的数据验证的最佳实践?

  •  
  •   banxi1988 ·
    banxi1988 · 2013-12-26 15:27:06 +08:00 · 3179 次点击
    这是一个创建于 3992 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在修改之前的数据模型验证的很ugly的代码,
    本来打算用FormEncode的,虽然觉得这个库还是挺不错.
    但是:
    (1)对于不同的验证类型使用子类,不是我想的的风格(感觉不怎么像Pythonic了,倒像Java了)
    ,而且,一个类的内存占用肯定比函数来得多.

    (2)对于错误消息的返回是使用抛出异常来返回的.这又让我想起了Java的异常了.我在写Java的时候,对于像这种需要多值返回的场景有时候是通过继承异常来着,但是更多时候是通过返回一个对象来着,
    因为抛出异常是相比返回对象来说重量级很多.

    (3)对于需要使用正则验证的类型,传递正则的字符串,这样的话不能享受预编译正则带来的好处.

    不知道大家对于模型验证这方面有没有一些优秀的轻量级解决方案呢?

    PS:下面的文章使用的类装饰器来验证模型感觉也挺不错的,
    http://www.informit.com/articles/article.aspx?p=1309289&seqNum=4


    下面我准备是参考FormEncode写出符合自己要求的验证函数来用,
    下面是写的验证整形的一个基本函数,请大家指定下:
    5 条回复    1970-01-01 08:00:00 +08:00
    family
        1
    family  
       2013-12-26 17:28:37 +08:00
    参数放在方法里面真蛋疼啊
    family
        2
    family  
       2013-12-26 17:29:00 +08:00
    @family 注释
    gfreezy
        3
    gfreezy  
       2013-12-26 19:15:17 +08:00
    is_empty(val) - - , 直接 bool(val) 就好了么
    cute
        4
    cute  
       2013-12-26 21:27:55 +08:00
    if not val:pass
    就可以了
    banxi1988
        5
    banxi1988  
    OP
       2013-12-27 17:43:40 +08:00
    @cute 这只是简单的为空性判断啊.
    @gfreezy 嗯,这确实

    但是Python界感觉在数据验证这块感觉不太友好.
    我今天抽空看了下Rails的Validators,
    真是太爱啊. 所以我决定借鉴Rails的做法了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   971 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:16 · PVG 04:16 · LAX 12:16 · JFK 15:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.