Tyrion是一个基于Python实现的支持多个WEB框架的Form表单验证组件,其完美的支持Tornado、Django、Flask、Bottle Web框架。Tyrion主要有两大重要动能:

  • 表单验证
  • 生成HTML标签
  • 保留上次提交内容

对于表单验证,告别书写重复的正则表达式对用户提交的数据进行验证的工作,从此解放双手,跟着我左手右手一个慢动作…

对于生成HTML标签,不在人工书写html标签,让Tyrion帮你自动创建…

对于保留上次提交内容,由于默认表单提交后页面刷新,原来输入的内容会清空,Tyrion可以保留上次提交内容。

github:https://github.com/WuPeiqi/Tyrion

Tyrion 中文文档(含示例源码)

1、下载安装

 1 pip install PyTyrion 

 

github: https://github.com/WuPeiqi/Tyrion

2、配置WEB框架种类

由于Tyrion同时支持Tornado、Django、Flask、Bottle多个WEB框架,所有在使用前需要进行指定。

1 import Tyrion
2 Tyrion.setup('tornado')
3 # setup的参数有:tornado(默认)、django、bottle、flask

 

 

 3、创建Form类

Form类用于提供验证规则、插件属性、错误信息等

1 from Tyrion.Forms import Form
2 from Tyrion.Fields import StringField
3 from Tyrion.Fields import EmailField
4  
5 class LoginForm(Form):
6     username = StringField(error={'required': '用户名不能为空'})
7     password = StringField(error={'required': '密码不能为空'})
8     email = EmailField(error={'required': '邮箱不能为空', 'invalid': '邮箱格式错误'})

 

 

4、验证用户请求

前端HTML代码:

 
 1 <form method="POST" action="/login.html">
 2     <div>
 3         <input type="text" name="username">
 4     </div>
 5     <div>
 6         <input type="text" name="password">
 7     </div>
 8     <div>
 9         <input type="text" name="email">
10     </div>
11  
12     <input type="submit" value="提交">
13 </form>

用户提交数据时,在后台书写如下代码即可实现用户请求数据验证(Tornado示例):

 1 class LoginHandler(tornado.web.RequestHandler):
 2     def get(self, *args, **kwargs):
 3         self.render('login.html')
 4  
 5     def post(self, *args, **kwargs):
 6         form = LoginForm(self)
 7  
 8         ###### 检查用户输入是否合法 ######
 9         if form.is_valid():
10  
11             ###### 如果不合法,则输出错误信息 ######
12             print(form.error_dict)
13         else:
14             ###### 如果合法,则输出用户输入的内容 ######
15             print(form.value_dict)
16         self.render('login.html')

 

 

示例01源码下载(含Tornado、Django、Flask、Bottle)

5、验证用户请求 && 生成HTML标签 && 保留上次输入内容 && 错误提示

Tyrion不仅可以验证用户请求,还可以生成自动创建HTML标签并且可以保留用户上次输入的内容。在HTML模板中调用Form类对象的字段即可,如(Tornado示例):

from Tyrion.Forms import Form
        from Tyrion.Fields import StringField
        from Tyrion.Fields import EmailField
 
        class LoginForm(Form):
            username = StringField(error={'required': '用户名不能为空'})
            password = StringField(error={'required': '密码不能为空'})
            email = EmailField(error={'required': '邮箱不能为空', 'invalid': '邮箱格式错误'})

 

 

 1 class LoginHandler(tornado.web.RequestHandler):
 2             def get(self, *args, **kwargs):
 3                 form = LoginForm(self)
 4                 self.render('login.html', form=form)
 5  
 6             def post(self, *args, **kwargs):
 7                 form = LoginForm(self)
 8  
 9                 print(form.is_valid())
10                 print(form.error_dict)
11                 print(form.value_dict)
12  
13                 self.render('login.html', form=form)

 

 
 1 <form method="post" action="/login.html">
 2             <div>
 3                 <!-- Form创建的标签 -->
 4                 {% raw form.username %}
 5  
 6                 <!-- 错误信息 -->
 7                 <span>{{form.error_dict.get('username',"")}}</span>
 8             </div>
 9             <div>
10                 {% raw form.password %}
11                 <span>{{form.error_dict.get('password',"")}}</span>
12             </div>
13             <div>
14                 {% raw form.email %}
15                 <span>{{form.error_dict.get('email',"")}}</span>
16             </div>
17             <input type="submit" value="提交"/

 

 

注意: HTML模板中的转义

示例02源码下载(含有Tornado、Django、Flask、Bottle)

6、Form字段类型

Form的字段用于指定从请求中获取的数据类型以及格式,以此来验证用户输入的内容。

 

1 from Tyrion.Forms import Form
2 from Tyrion.Fields import StringField
3 from Tyrion.Fields import EmailField
4  
5 class LoginForm(Form):
6     username = StringField(error={'required': '用户名不能为空'})
7     password = StringField(error={'required': '密码不能为空'})
8     email = EmailField(error={'required': '邮箱不能为空', 'invalid': '邮箱格式错误'})

 

 

以上代码表示此Form类可以用于验证用户输入的内容,并且 username和password必须不能为空,email必须不能为空并且必须是邮箱格式。

目前支持所有字段:

 
  1 StringField
  2     """
  3     要求必须是字符串,即:正则^.*$
  4  
  5     参数:
  6         required    布尔值,是否允许为空
  7         max_length  整数,限制用户输入内容最大长度
  8         min_length  整数,限制用户输入内容最小长度
  9         error       字典,自定义错误提示,如:{
 10                                             'required': '值为空时的错误提示',
 11                                             'invalid': '格式错误时的错误提示',
 12                                             'max_length': '最大长度为10',
 13                                             'min_length': '最小长度为1',
 14                                           }
 15         widget      定制生成的HTML插件(默认InputText)
 16     """
 17  
 18 EmailField
 19     """
 20     要求必须是邮箱格式的字符串
 21  
 22     参数:
 23         required    布尔值,是否允许为空
 24         max_length  整数,限制用户输入内容最大长度
 25         min_length  整数,限制用户输入内容最小长度
 26         error       字典,自定义错误提示,如:{
 27                                             'required': '值为空时的错误提示',
 28                                             'invalid': '格式错误时的错误提示',
 29                                             'max_length': '最大长度为10',
 30                                             'min_length': '最小长度为1',
 31                                           }
 32         widget      定制生成的HTML插件(默认InputText)
 33     """
 34  
 35 IPField
 36     """
 37     要求必须是IP格式
 38  
 39     参数:
 40         required    布尔值,是否允许为空
 41         max_length  整数,限制用户输入内容最大长度
 42         min_length  整数,限制用户输入内容最小长度
 43         error       字典,自定义错误提示,如:{
 44                                             'required': '值为空时的错误提示',
 45                                             'invalid': '格式错误时的错误提示',
 46                                             'max_length': '最大长度为10',
 47                                             'min_length': '最小长度为1',
 48                                           }
 49         widget      定制生成的HTML插件(默认InputText)
 50  
 51     """
 52  
 53 IntegerField
 54     """
 55     要求必须整数格式
 56  
 57     参数:
 58         required    布尔值,是否允许为空
 59         max_value   整数,限制用户输入数字最大值
 60         min_value   整数,限制用户输入数字最小值
 61         error       字典,自定义错误提示,如:{
 62                                             'required': '值为空时的错误提示',
 63                                             'invalid': '格式错误时的错误提示',
 64                                             'max_value': '最大值为10',
 65                                             'max_value': '最小值度为1',
 66                                           }
 67         widget      定制生成的HTML插件(默认InputText)
 68  
 69     """
 70  
 71 FloatField
 72     """
 73     要求必须小数格式
 74  
 75     参数:
 76         required    布尔值,是否允许为空
 77         max_value   整数,限制用户输入数字最大值
 78         min_value   整数,限制用户输入数字最小值
 79         error       字典,自定义错误提示,如:{
 80                                             'required': '值为空时的错误提示',
 81                                             'invalid': '格式错误时的错误提示',
 82                                             'max_value': '最大值为10',
 83                                             'max_value': '最小值度为1',
 84                                           }
 85         widget      定制生成的HTML插件(默认InputText)
 86     """
 87  
 88 StringListField
 89     """
 90     用于获取请求中的多个值,且保证每一个元素是字符串,即:正则^.*$
 91     如:checkbox或selct多选时,会提交多个值,用此字段可以将用户提交的值保存至列表
 92  
 93     参数:
 94         required         布尔值,是否允许为空
 95         ele_max_length   整数,限制用户输入的每个元素内容最大长度
 96         ele_min_length   整数,限制用户输入的每个元素内容最小长度
 97         error            字典,自定义错误提示,如:{
 98                                             'required': '值为空时的错误提示',
 99                                             'element': '列表中的元素必须是字符串',
100                                             'ele_max_length': '最大长度为10',
101                                             'ele_min_length': '最小长度为1',
102                                           }
103         widget           定制生成的HTML插件(默认InputMultiCheckBox,即:checkbox)
104     """
105  
106 IntegerListField
107     """
108     用于获取请求中的多个值,且保证每一个元素是整数
109     如:checkbox或selct多选时,会提交多个值,用此字段可以将用户提交的值保存至列表
110  
111     参数:
112         required         布尔值,是否允许为空
113         ele_max_value   整数,限制用户输入的每个元素内容最大长度
114         ele_min_value   整数,限制用户输入的每个元素内容最小长度
115         error            字典,自定义错误提示,如:{
116                                             'required': '值为空时的错误提示',
117                                             'element': '列表中的元素必须是数字',
118                                             'ele_max_value': '最大值为x',
119                                             'ele_min_value': '最小值为x',
120                                           }
121         widget           定制生成的HTML插件(默认InputMultiCheckBox,即:checkbox)
122     """
View Code

 

 

相关文章: