美文网首页
Python Schema

Python Schema

作者: JM68 | 来源:发表于2019-08-27 11:00 被阅读0次

    WHAT?

    schema是一个用于验证Python数据结构的库,例如从配置文件,表单,外部服务或命令行解析获得的数据结构,从JSON / YAML(或其他)转换为Python数据类型。

    • 安装pip install schema

    Example

    • 基础验证
    from schema import Schema, And, Optional, Use
    # 定义数据结构(列表中的字典)
    # And表示需同时满足 (字符串+长度(表示不能为空))
    # Use表示转换 若使用'80'会转为int80 加入lambda表达式可以增加验证条件
    # Optional表示可选, 字典中可以包含可以不包含
    # 如果字典需要不包含的键值在字典中使用 ignore_extra_keys=True
    schema = Schema([{'name': And(str, len),
                      'age': And(Use(int), lambda x: 18 <= x <= 99),
                      Optional('gender'): And(str, Use(str.lower), lambda s: s in ('squid', 'kid'))}])
    data = [{'name': 'jmd', 'age': 18},
            {'name': 'zbj', 'age': '80'},
            {'name': 'hhs', 'age': 18, 'gender': 'Kid'}]
    print(schema.validate(data))
    
    • 设置默认值
    a = Schema({Optional('data', default="abc"): And(str, len)})
    print(a.validate({})) # 输出结果:{'data': 'abc'}
    print(a.validate({'data': "bcd"})) # 输出结果:{'data': 'bcd'}
    print(a.is_valid({'data': "bcd"})) # 输出 True 
    
    • 密码验证
    # 表示pwd,password两者只能有一个, 结果必须为字符串且长度大于6
    b = Schema({Or("pwd", "password", only_one=True): And(str, lambda s: len(s) > 6)})
    print(b.is_valid({"password": "abc"})) # False
    print(b.is_valid({"pwd": "1234567"})) # True
    print(b.is_valid({"pwd": "1234567", "password": "abc"})) # False
    # 验证密码复杂度
    from schema import Regex
    c = Schema(Regex('^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,16}$')) # 必须包含大写字母,小写字母,数字,特殊字符四种中的三种,长度要求8到16位
    print(c.is_valid('ABadsdd12'))
    

    相关文章

      网友评论

          本文标题:Python Schema

          本文链接:https://www.haomeiwen.com/subject/tyoidctx.html