【转】Form表单校验组件——Tyrion
参考博客
更多的字段使用及说明,见博客:
https://www.cnblogs.com/wupeiqi/p/5938916.html
我自己做的示例
目录结构
forms中存放校验的类,templates中是模板文件,app.py是tornado项目启动文件。
loginform.py
# -*- coding:utf-8 -*- 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":"邮箱格式错误"})
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <form action="" method="post"> <!-- <div>--> <!-- 用户名:<input type="text" name="username">--> <!-- </div>--> <!-- <div>--> <!-- 密码:<input type="text" name="password">--> <!-- </div>--> <!-- <div>--> <!-- 邮箱:<input type="text" name="email">--> <!-- </div>--> <div> <!-- Form标签的创建 --> 用户名:{% raw form.username %} <!-- 错误信息 --> <span>{{ form.error_dict.get('username',"") }}</span> </div> <div> 密码:{% raw form.password %} <span>{{ form.error_dict.get("password","") }}</span> </div> <div> 邮箱:{% raw form.email %} <span>{{ form.error_dict.get("email",'') }}</span> </div> <input type="submit" value="提交"> </form> </body> </html>
app.py
# -*- coding:utf-8 -*- import os import tornado.web import tornado.ioloop from forms.loginform import LoginForm class LoginHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): form = LoginForm(self) self.render("login.html",form=form) def post(self, *args, **kwargs): form = LoginForm(self) # 检查用户输入是否合法 if form.is_valid(): # 使用value_dict接收用户输入的合法数据 print("合法,用户输入的合法内容为:", form.value_dict) else: # 若用户输入不合法,输入错误信息,在error_dict中 print("不合法,用户输入的不合法内容:", form.error_dict) # 返回页面 self.render("login.html",form=form) if __name__ == '__main__': # 路由 application = tornado.web.Application( [ (r"/login", LoginHandler), ], template_path = os.path.join(os.path.dirname(__file__),"templates"), debug=True, ) # 使用表单校验 import Tyrion Tyrion.setup("tornado") print("starting...") application.listen(8888) tornado.ioloop.IOLoop.instance().start()
效果演示