美文网首页
更优雅的表单验证

更优雅的表单验证

作者: EdisonDong | 来源:发表于2017-02-06 22:53 被阅读0次

这里已经很清楚的说明flask默认使用的表单验证方式了:http://docs.jinkan.org/docs/flask/patterns/wtforms.html
在我使用过的验证方式里,Laravel(流行的php框架)算是非常优雅的。所以这用laravel的思想来开发一个python的表单验证模块。

思想

  1. 不想写类,不想每次验证都要实例化一个类,即使程序背后的确是这么做的,我也不想看到,只希望像调用了一个方法似的使用。
  2. 语义化,需要看半天说明的功夫都用正则完成,最好一看例子就知道怎么用。
  3. 提示信息的国际化支持(多语言),并且自定义。

接口(实例)

def validate_min()
def validate_max()
def validate_between()

class Validation(object):
    def __init__(self, data, rules):
        self.data = data
        self.rules = rules

    def validate(self):
        data, rules = self.data, self.rules
        for key, rule in rules.items():
            if not self.validate_one(key, data[key], rule):
                return False
        return True

    def validate_one(self, key, value, rule):
        rules = rule.split("|")
        passed = True
        for r in rules:
            if ':' in r:
                l = r.split(":")
                method, limit = l[0], l[1]
                if getattr(self, "validate_"+method):
                    func = getattr(self, 'validate_'+method)
                    if not func(value, limit):
                        passed = False
                else:
                    raise BaseException("method validate_"+method+" is not exists")
            else:
                if getattr(self, 'validate_'+r):
                    func = getattr(self, 'validate_'+r)
                    if not func(key, value):
                        passed = False
                else:
                    raise BaseException("method validate_"+r+" is not exists")

        return passed

    def validate_required(self, key,value):
        return key in self.data

    def validate_max(self, value, limit):
        return len(value) <= int(limit)

    def validate_min(self, value, limit):
        return len(value) >= int(limit)

调用

v = Validation({'name': 'Tom'}, {'name': 'required|min:5'})
print(v.validate())

相关文章

  • 13-实现多语言及表单验证

    前言 表单验证是前端开发中肯定要实现的功能,如何更加优雅的在 React 实现,如何将表单验证与多语言更融洽的结合...

  • 【Vue3+Vite+TS】13.0 组件十:强大的表单组件(上

    功能 可配置型表单,通过json对象的方式自动生成表单 具备更完善的功能:表单验证、自定义验证规则、动态删减表单、...

  • 更优雅的表单验证

    这里已经很清楚的说明flask默认使用的表单验证方式了:http://docs.jinkan.org/docs/f...

  • vue+element 表单验证问题

    常规表单验证、自定义表单验证、动态增删表单验证 1.常规表单验证 2.自定义表单验证 3.动态增减 a.表单 b.表格

  • 九、疯狂的表单

    疯狂的表单 新增表单控件 新增表单属性 表单验证反馈 关闭验证

  • Vue 后台管理项目4-登录页表单验证

    登录页表单验证 1.登录页表单验证 Ⅰ.在饿了吗Form表单组件下,找到表单验证示例 Form 组件提供了表单验证...

  • jQuery Validate 验证框架详解

    jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选...

  • from 表单验证

    from 表单验证: 1、数组表单验证:

  • 验证

    验证 表单请求验证类 必须 使用 表单请求 - FormRequest 类 来处理控制器里的表单验证。 验证类的 ...

  • 用AOP装饰函数,实现插件式表单验证

    之前用策略模式实现了表单的验证,现在学习了装饰模式发现实现表单验证更简洁,意图和目的更明确。 下面来看一下,装饰函...

网友评论

      本文标题:更优雅的表单验证

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