各个字段类,含正则和验证方法

#字段类
class IPField:
REGULAR = "^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}" def __init__(self,error_dict=None,required=True):
self.error_dict={}
if error_dict:
self.error_dict.update(error_dict)
self.required=required
self.error=None
self.is_valid=False
self.value=None def validate(self,name,input_value):
if not self.required: #允许为空
if input_value.strip():
ret = re.match(IPField.REGULAR, input_value)
if ret:
self.is_valid = True
self.value = ret.group()
else:
if self.error_dict.get('valid', None):
self.error = self.error_dict['valid']
else:
self.error = "%s is invalid" % name
else:
self.is_valid = True
self.value=input_value
else: #不允许为空
if not input_value.strip():
if self.error_dict.get('required',None):
self.error=self.error_dict['required']
else:
self.error="%s is required"%name
else:
ret = re.match(IPField.REGULAR,input_value)
if ret:
self.is_valid=True
self.value=ret.group()
else:
if self.error_dict.get('valid',None):
self.error=self.error_dict['valid']
else:
self.error="%s is invalid"%name #可以含有多个文件名
class FileField:
REGULAR = "^(\w\.pdf)|(\w\.mp3)|(\w\.py)$" def __init__(self,error_dict=None,required=True):
self.error=None
self.success_file_name_list={}
self.value=None
self.is_valid=True#后面只要有一个错误,就是错
self.required=required
self.error_dict={}
if error_dict:
self.error_dict.update(error_dict) def validate(self,name,all_file_name_list):#all_file_name_list所有文件文件名
if not self.required:
# if not input_value.strip():
# ret=re.match(FileField.REGULAR,input_value)
# if ret:
# self.is_valid=True
# self.value=input_value
# else:
# if self.error_dict.get('valid',None):
# self.error=self.error_dict['valid']
# else:
# self.error="%s is invalid"%name
# else:
# self.is_valid=True
# self.value=input_value
if not all_file_name_list:
self.is_valid=True
else:
#循环匹配所有
for input_value in all_file_name_list:
ret = re.match(FileField.REGULAR, input_value)
if ret:
self.success_file_name_list.append(input_value)
else:
self.is_valid=False
if self.error_dict.get('valid', None):
self.error = self.error_dict['valid']
else:
self.error = "%s is invalid" % name
break
else:
if not all_file_name_list:
self.is_valid=False
if self.error_dict.get('required',None):
self.error=self.error_dict['required']
else:
self.error="%s is required"%name
else:
#循环匹配所有
for input_value in all_file_name_list:
ret = re.match(FileField.REGULAR, input_value)
if ret:
self.success_file_name_list.append(input_value)
else:
self.is_valid=False
if self.error_dict.get('valid', None):
self.error = self.error_dict['valid']
else:
self.error = "%s is invalid" % name
break #字符串验证
class StringField:
REGULAR = "(.*)" def __init__(self,error_dict=None,required=True):
self.is_valid=False
self.value=None
self.error=None
self.error_dict={}
if error_dict:
self.error_dict.update(error_dict)
self.required=required def validate(self,name,input_value):
if not self.required: #允许为空
if input_value.strip():
ret = re.match(StringField.REGULAR,input_value)
if ret:
self.is_valid=True
self.value=input_value
else:
if self.error_dict.get('valid',None):
self.error=self.error_dict['valid']
else:
self.error="%s is invalid"%name
else:
self.is_valid=True
self.value=input_value
else:#不允许为空
if not input_value.strip():
if self.error_dict.get('required',None):
self.error=self.error_dict['required']
else:
self.error="%s is required"%name
else:
ret=re.match(StringField,input_value)
if ret:
self.is_valid=True
self.value=input_value
else:
if self.error_dict.get('valid',None):
self.error=self.error_dict['valid']
else:
self.error="%s is invalid"%name #复选框验证
class CheckBoxField:
def __init__(self,required=True,error_dict=None):
self.is_valid=False
self.error=None
self.required=required
if error_dict:
self.error_dict=error_dict
self.value=None def validate(self,name,input_value):
#用户表单输入的数据可以为空
if not self.required:
self.is_valid=True
self.value=input_value
else:
if not input_value:
if self.error_dict.get('required',None):
self.error=self.error_dict['required']
else:
self.error="%s is required"%name
else:
self.is_valid=True
self.value=input_value

验证类基类

#form验证基类
class BaseForm(object): def check_valid(self,handler):
flag=True
error_message_dict={}
success_dict={}
for key,regular in self.__dict__.items():
#用户输入值
if type(regular) == CheckBoxField:
input_val=handler.get_arguments(key)
elif type(regular)==FileField:
#包含上传多个文件[{'body':'','filename':''},{'body':'','filename':''}]
file_list=handler.request.files.get(key)
#获取其中的文件名
input_val=[]
for item in file_list:
input_val.append(item['filename'])
else:
input_val=handler.get_argument(key) regular.validate(key,input_val)
if regular.is_valid:
success_dict[key]=regular.value
else:
flag=False
error_message_dict[key]=regular.error return flag,success_dict,error_message_dict

具体验证类子类:

#form验证类,采用对象
class HomeForm(BaseForm):
def __init__(self):
self.ip = IPField(required=True,error_dict={'required':'数据不为空',"valid":"验证出错"})
self.host=StringField(required=True,error_dict={'required':"主机名必须存在","valid":"这都会出错"})
self.sex=CheckBoxField(required=True,error_dict={'required':'复选框必须选择'})
# self.file=FileField(required=True,error_dict={'valid':'文件格式不正确'})

其他业务:

#采用HomeForm验证类
class HomeHandler(tornado.web.RequestHandler):
def get(self):
self.render('home.html',error_dict=None) def post(self, *args, **kwargs):
formCk = HomeForm()
is_valid,success_dict,error_dict=formCk.check_valid(self)
if is_valid:
print(success_dict)
self.write("ok")
else:
print(error_dict)
self.render('home.html',error_dict=error_dict)
settings={
'static_path':'statics',
'template_path':'views',
} application=tornado.web.Application([
(r"/index",IndexHandler),
(r"/home",HomeHandler),
],**settings) if __name__ == "__main__":
application.listen()
tornado.ioloop.IOLoop.instance().start()

前端代码:

    <form method="post" action="/home">
<input type="text" placeholder="主机" name="host"/>
<input type="text" placeholder="IP" name="ip">
<input type="checkbox" name="sex" value=""/>男
<input type="checkbox" name="sex" value=""/>女
<input type="file" name="file">
<input type="file" name="file">
<span>
{% if error_dict and 'ip' in error_dict %}
{{error_dict['ip']}}
{% end %}
{% if error_dict and 'host' in error_dict %}
{{error_dict['host']}}
{% end %}
</span>
<input type="submit" value="提交"/>
</form>

python---自定义字段验证的更多相关文章

  1. Django项目:CRM(客户关系管理系统)--38--30PerfectCRM实现King_admin编辑自定义字段验证

    # kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...

  2. 27)django-form操作示例(动态Select数据,自定义字段验证,全局验证等)

    1)普通传递select数据 # -*- coding:utf-8 -*- __author__ = 'shisanjun' from django import forms from django. ...

  3. django 表单验证和字段验证

    表单验证和字段验证 表单验证发生在数据验证之后.如果你需要自定义这个过程,有几个不同的地方可以修改,每个地方的目的不一样.表单处理过程中要运行三种类别的验证方法.它们通常在你调用表单的is_valid ...

  4. Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法

    Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法 一丶ORM常用字段 ...

  5. Python--day68--Django ORM常用字段、不常用的字段、自定义字段

    ORM和数据库的对应关系: Django ORM 常用字段和参数 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建 ...

  6. SharePoint 2013 图文开发系列之自定义字段

    SharePoint使用的优势,就在于开箱即用.快速搭建,SharePoint自身为我们提供了很多字段类型,已经很丰富了.但是,在实际应用中,我们还需要一些功能特殊的字段,下面,我们简单介绍下字段的开 ...

  7. Java自定义表单、自定义字段

    最近想实现用户自定义数据库中的字段,我想大部分人第一想到的就是EAV(Entity-Attribute-Value),这种方式对于写一个小的毕业设计应该还可以使用,当然也有很多CMS系统采用这种方式, ...

  8. [原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. webservice安全性之 SoapHeader自定义身份验证

    相信很多开发者都用过WebService来实现程序的面向服务,本文主要介绍WebService的身份识别实现方式,当然本文会提供一个不是很完善的例子,权当抱砖引玉了. 首先我们来介绍webservic ...

  10. ExtJs 自定义Vtype验证

    最近公司开发项目在用ExtJs,碰到验证的就大概的总结了一些常用的验证.自定义的验证主要有两种方式:一种是单字段的自定义验证,另一种是多字段间的验证.对于单字段的验证主要通过regex配置项指定自定义 ...

随机推荐

  1. Daily Scrum- 12/23

    Meeting Minutes 与Travis和Zhongqiu讨论了Beta的Feature以及更长期的计划: 讨论了一些使用及设计上的Bug (Feature); 开始了新的开发周期: Burnd ...

  2. 每天学习SQL

    SELECT table_name FROM information_schema.tables WHERE table_schema='survey170227_main' AND table_na ...

  3. (Alpha)Let's-版本测试报告

    测试中发现的Bug 我们在测试之前发布了新的版本Version1.1,发布新版本的同时也带来一些问题: 修复了上传图片画质问题的Bug 修复了搜索功能的部分Bug 增加了下拉刷新的功能 修复了部分界面 ...

  4. MYSQL INDEX BTREE HASH

    https://dev.mysql.com/doc/refman/5.6/en/index-btree-hash.html 译文:http://itindex.net/detail/54241-tre ...

  5. Notepad++和Sublime单词首字符大小写转化问题

  6. Excel 使用AutoFill提示“类Range的AutoFill方法无效”

    今天遇到一个神奇的问题,之前一直使用很好的代码突然报错:“类Range的AutoFill方法无效”,在网上搜索了一番,感觉没有一个与我遇到的情况相同的.debug,查看一下代码,发现程序里,AutoF ...

  7. KNN python实践

    本文实现了一个KNN算法,准备用作词频统计改进版本之中,这篇博文是从我另一个刚开的博客中copy过来的. KNN算法是一个简单的分类算法,它的动机特别简单:与一个样本点距离近的其他样本点绝大部分属于什 ...

  8. python之random函数

    # random各种使用方法 import random # 随机生成[0.1)的浮点数 print("random():", random.random()) # 随机生成100 ...

  9. 安卓创始人计划推出能帮你约会的AI手机

    安卓操作系统的创始人安迪·鲁宾早些年已经离开谷歌公司,离开谷歌后鲁宾成立Essential  Phone手机品牌.不过正如你所知道的那样尽管安迪·鲁宾有着很大的名气,但Essential  Phone ...

  10. 一个死循环导致的栈溢出实例:StackOverFlowError

    有一个功能,要用复选框组做成单选框效果,如果有三个复选框 CheckBox ,并且保证每次只能选中一个.刚开始添加了以下的值改变后的监听方法 addValueChangeListener ,却导致了栈 ...