V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sevenQu
V2EX  ›  Flask

flask 通过 ajax, post 获取来的 json 数据,例如邮箱,手机号码,用户名等数据,如何进行格式验证

  •  
  •   sevenQu · 2018-02-28 23:08:28 +08:00 · 4000 次点击
    这是一个创建于 2220 天前的主题,其中的信息可能已经有所发展或是发生改变。

    上面只是一个例子,我记得教程里说过,前端传来的数据都是不安全的,需要进行验证

    而这个不是表单提交,没有直接的插件类可以使用

    如果我来做,就只能自己创建一个验证类,使用正则进行验证,将其导入需要验证的文件使用即可

    同时类中的方法没有实例化就使用,是不是需要全部用 @staticmethod 修饰作为静态方法,感觉 python 不需要这样,直接定义类中的方法即可,求指点

    写到这里,我觉得肯定有人已经把这个类写好了,求告知

    10 条回复    2018-03-03 10:22:46 +08:00
    Eds1995
        1
    Eds1995  
       2018-02-28 23:16:36 +08:00 via Android
    可以试一下这个库 marshmallow
    knightdf
        2
    knightdf  
       2018-03-01 00:02:00 +08:00
    marshmallow +1
    DeanThompson
        3
    DeanThompson  
       2018-03-01 00:13:22 +08:00 via iPhone
    marshmallow 或 jsonschema
    mgsparrow
        4
    mgsparrow  
       2018-03-01 01:39:49 +08:00 via iPhone
    sqlalchemy 可以嗎
    lbfeng
        5
    lbfeng  
       2018-03-01 01:45:30 +08:00
    同时类中的方法没有实例化就使用,是不是需要全部用 @staticmethod 修饰作为静态方法

    ligyxy
        6
    ligyxy  
       2018-03-01 05:57:14 +08:00
    huahuajun9527
        7
    huahuajun9527  
       2018-03-01 10:27:57 +08:00
    不用 @staticmethod 可以这样做,把这些验证方法全都写到一个文件里,import 进来,然后 模块名.方法名 就好了。

    from jsonschema import validate

    schema = {
    "type": "object",
    "properties": {
    "phone_number": {
    "type": "string",
    "pattern": "^1\d{10}$",
    "description": "手机号码"
    },
    "username": {
    "type": "string",
    "pattern": "^[\w]{4,20}$",
    "description": "用户名"
    }
    },
    "required": ["phone_number", "username"]
    }

    param = {'phone_number': '12345678910', 'username': '10086'}
    try:
    validate(param, schema)
    except Exception as e:
    print(e.message)
    zhao6217
        8
    zhao6217  
       2018-03-01 15:43:08 +08:00
    直接使用 flask 中自带的 request 不就好了,from flask import request,request.get_json 方法能够帮助将请求体的 json 数据转换为字典,直接使用字典的 get 方法取得数据,再判断不就好了,专门搞个模块出来,感觉没什么用啊
    srlp
        9
    srlp  
       2018-03-02 13:02:35 +08:00 via iPhone
    补充一下,

    > 同时类中的方法没有实例化就使用,是不是需要全部用 @staticmethod 修饰作为静态方法,感觉 python 不需要这样,直接定义类中的方法即可,求指点

    需要 @ 。

    但是!**python 并不是 java**,不需要把所有方法都写到类里面的!

    可能更好的方法:把方法写在同一个模块(文件)的类 **外面**,作为一个独立函数即可。
    sevenQu
        10
    sevenQu  
    OP
       2018-03-03 10:22:46 +08:00
    @srlp 嗯,前几天看别人写的代码发现了,有时没必要放在类里面,直接把方法写在模块里就好,真的很赞,谢了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   978 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 21:56 · PVG 05:56 · LAX 14:56 · JFK 17:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.