Form 表单验证
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.ioloop import tornado.web import re class MainForm(object): def __init__(self): self.host = "(.*)" self.ip = "^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$" self.port = '(\d+)' self.phone = '^1[3|4|5|8][0-9]\d{8}$' def check_valid(self,handle): flag = True value_dict = {} for key,regular in self.__dict__.items(): input_value = handle.get_argument(key) val = re.match(regular, input_value) print(key, input_value, val, regular) if not val: flag = False value_dict[key] = input_value return flag, value_dict class IndexHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): self.render('index.html') def post(self, *args, **kwargs): obj = MainForm() is_valid, value_dict = obj.check_valid(self) print(is_valid) if is_valid: print(value_dict) settings = { 'template_path': 'views', 'static_path': 'statics', # 'static_url_prefix':'/statics/', # 'xsrf_cookies':True } application = tornado.web.Application([ (r"/index", IndexHandler), # (r"/checkout", CheckoutHandler), ], **settings) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/index" method="post"> <input type="text" name="host" placeholder="host" > <input type="text" name="ip" placeholder="ip" > <input type="text" name="port" placeholder="port" > <input type="text" name="phone" placeholder="phone" > <input type="submit" value="提交"> </form> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/usr/bin/env python # -*- coding:utf-8 -*- #!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.ioloop import tornado.web import re class IPFiled:#定义类 #定义正则 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, required=True, error_dict=None): # required = True, error_dict = {'required': "别闹,别整空的..", "valid": "骚年,格式错误了"} """ required = True的话证明不能为空, :param error_dict: 存错误的字典信息 """ # 封装了错误信息 self.error_dict = {}#定义一个新的错误字典{'required': "别闹,别整空的..", "valid": "骚年,格式错误了"} if error_dict:#如果错误字典有内容,为True self.error_dict.update(error_dict)#那就把错误内容更新到字典里面 self.required = required #默认等于true self.error = None # 错误信息 self.value = None#值 self.is_valid = False#验证是否通过,默认为false def validate(self, name, input_value): #定义name和输入的值(name是key也是ip) """ :param name: 字段名 :param input_value: 用户表单中输入的内容 :return: """ if not self.required: #如果为false,那么就是不用输入 # 用户输入可以为空 self.is_valid = True #通过验证 self.value = input_value#值是输入的值 else:#如果为True if not input_value.strip():#假如输入为空值的话,not inp..strip就是True,就是证明没有值 if self.error_dict.get('required',None): #如果错误列表获取 # error_dict = {'required': "别闹,别整空的..", "valid": "骚年,格式错误了"} self.error = self.error_dict['required']#"别闹,别整空的.. else:#如果没有别闹,别整空的,就是required的值为空的话 self.error = "%s is required" % name #self.error = 这个”ip is ....“ else:#假如有值 ret = re.match(IPFiled.REGULAR, input_value)#(正则, 输入的信息) if ret:#如果有匹配的话 self.is_valid = True # self.value = input_value #输入的内容,value else:#没有匹配到的话 if self.error_dict.get('valid', None): # 获取valid的值有内容的话,valid": "骚年,格式错误了" self.error = self.error_dict['valid']#那么错误的值就等于这个 else:#如果没有则为无效的(这句的意思就是如果你没人输入骚年什么的。。。就这句了) self.error = "%s is invalid" % name class BaseForm: #定义baseform类 def check_valid(self, handle):#handle就是homehandler的对象 flag = True#定义了一个标志位 error_message_dict = {} #错误消息列表 success_value_dict = {}#成功消息列表 for key, regular in self.__dict__.items():#{} # key: ip ..... # handle: HomeIndex对象,self.get_... self. # regular: IPFiled(required=True) input_value = handle.get_argument(key)#输入ip的值 # input_value = 用户输入的值 # 将具体的验证,放在IPFiled对象中 regular.validate(key, input_value) #regular是HomeForm类里面的IPFiled。。。,所以可以调用IPFiled的validate方法 if regular.is_valid: success_value_dict[key] = regular.value#key等于输入的值 else: error_message_dict[key] = regular.error#等于错误信息 flag = False return flag, success_value_dict, error_message_dict class HomeForm(BaseForm): def __init__(self): self.ip = IPFiled(required=True, error_dict={'required': "别闹,别整空的..", "valid": "骚年,格式错误了"}) #self.ip就是一个对象 class HomeHandler(tornado.web.RequestHandler): def get(self): self.render('home.html',error_dict = None) def post(self, *args, **kwargs): obj = HomeForm()#创建了对象 # 获取用户输入的内容 # 和正则表达式匹配 is_valid, success_dict, error_dict = obj.check_valid(self) if is_valid: print('success',success_dict) else: print('error', error_dict) self.render('home.html', error_dict = error_dict) settings = { 'template_path': 'views', 'static_path': 'statics', 'static_url_prefix': '/statics/', } application = tornado.web.Application([ # (r"/index", IndexHandler), (r"/home", HomeHandler), ], **settings) if __name__ == "__main__": application.listen(8001) tornado.ioloop.IOLoop.instance().start()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/home" method="post"> <input type="text" name="ip" placeholder="ip"> {% if error_dict %} <span> {{ error_dict['ip']}}</span> {% end %} <input type="submit"> </form> </body> </html>
作者:沐禹辰
出处:http://www.cnblogs.com/renfanzi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
出处:http://www.cnblogs.com/renfanzi/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。