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


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

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

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

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

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

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

    425762-20161009185237561-173732312

    使用文档

    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

    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代码:

    用户提交数据时,在后台书写如下代码即可实现用户请求数据验证(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': '邮箱格式错误'})

    注意: HTML模板中的转义

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

    6、Form字段类型

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

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

    目前支持所有字段:

    7、Form字段widget参数:HTML插件

    HTML插件用于指定当前字段在生成HTML时表现的种类和属性,通过指定此参数从而实现定制页面上生成的HTML标签

    上述LoginForm的password字段要求用户输入必须是字符串类型,并且指定生成HTML标签时会创建为<input type=’password’ > 标签

    目前支持所有插件:

    8、动态初始化默认值

    由于Form可以用于生成HTML标签,如果想要在创建标签的同时再为其设置默认值有两种方式:

    • 静态,在插件参数中指定
    • 动态,调用Form对象的 init_field_value 方法来指定

    动态初始值 – 处理请求的Handler(Tornado)

    9、更多示例

    示例源码下载:猛击这里

    a. 基本使用

    b. 多选checkbox

    c、多选select

    d. 动态select选项

    Python
     1 class DynamicSelectForm(Form):
     2     city = IntegerField(error={'required': '年龄不能为空', 'invalid': '年龄必须为数字'},
     3                         widget=SingleSelect(text_value_list=[{'value': 1, 'text': '上海'},
     4                                                              {'value': 2, 'text': '北京'},
     5                                                              {'value': 3, 'text': '广州'}])
     6                         )
     7  
     8     multi_favor = IntegerListField(error={'required': '请选择爱好', 'invalid': '选择爱好格式错误'},
     9                                    widget=MultiSelect(text_value_list=[{'value': 1, 'text': '篮球', },
    10                                                                        {'value': 2, 'text': '足球', },
    11                                                                        {'value': 3, 'text': '乒乓球', },
    12                                                                        {'value': 4, 'text': '羽毛球'}, ]))
    13  
    14     def __init__(self, *args, **kwargs):
    15         super(DynamicSelectForm, self).__init__(*args, **kwargs)
    16  
    17         # 获取数据库中的最新数据并显示在页面上(每次创建对象都执行一次数据库操作来获取最新数据)
    18         self.city.widget.text_value_list = [{'value': 1, 'text': '上海'},
    19                                             {'value': 2, 'text': '北京'},
    20                                             {'value': 3, 'text': '南京'},
    21                                             {'value': 4, 'text': '广州'}]
    22  
    23         self.multi_favor.widget.text_value_list = [{'value': 1, 'text': '篮球'},
    24                                                    {'value': 2, 'text': '足球'},
    25                                                    {'value': 3, 'text': '乒乓球'},
    26                                                    {'value': 4, 'text': '羽毛球'},
    27                                                    {'value': 5, 'text': '玻璃球'}]
  • 相关阅读:
    使用MetaLogo对不等长序列绘制Sequence logo
    RocketMQ源码 索引文件/indexFile 和 消费队列/ConsumeQueue
    看了两篇教程,我的博客炸了
    BCD注册表找不到怎么办?
    扫一扫PC版 V0.3
    java_Lambda表达式
    Java_多线程
    java_静态方法和非静态方法的区别
    idea_快捷键
    Java_稀疏数组
  • 原文地址:https://www.cnblogs.com/xiongmozhou/p/9092646.html
Copyright © 2020-2023  润新知