中通顺昌建设有限公司网站,网页设计实验报告小结,北京小程序制作首选华网天下,中国四大门户网站分别是1.Tornado_wtform介绍
WTForms是用于Python Web开发的灵活的表单验证喝呈现库。他可以和任何的web框架和模板引擎一起使用。 现在因为前后端分离的原因#xff0c;一般只用于表单的验证#xff0c;模板渲染的功能基本不再使用。
2.为什么要表单数据验证
其实前端也是可以进…1.Tornado_wtform介绍
WTForms是用于Python Web开发的灵活的表单验证喝呈现库。他可以和任何的web框架和模板引擎一起使用。 现在因为前后端分离的原因一般只用于表单的验证模板渲染的功能基本不再使用。
2.为什么要表单数据验证
其实前端也是可以进行数据验证但由于前后端分离的原因还是在后端进一步验证可以保证传入到的数据合法。
3.安装
pip install wtforms-tornado4.使用方式
创建表单类 1. 需要继承wtforms_tornado.Form 2. 定义字段类型 - 可以使用wtforms.fields引入 3. 定义验证规则 - 可以使用wtforms.validators引入创建表单对象调用表单验证方法
5.Tornado_wtform数据验证
这里将使用原先的写过的个人信息填写对其进行添加数据验证功能 个人信息案例原网址
5.1错误信息解决
ImportError: cannot import name ‘compat’ from ‘wtforms’
wtforms3.0.1 删除 pip uninstall wtforms下载旧版本pip install wtforms2.3.3
5.2代码展示
from wtforms34 import UserForm# 建立表单对象uf UserForm(self.request.arguments)# 验证if not uf.validate():# 成功true 失败falseimport jsondata json.dumps(uf.errors, ensure_asciiFalse)self.write(data)表单验证规则
from wtforms_tornado import Form
from wtforms.fields import IntegerField, StringField
from wtforms.validators import DataRequired, Length# 创建一个表单类
class UserForm(Form):# 定义字段注意 验证字段的名字一定要和前端传递来的名字保持一致# 编写规则id IntegerField(ID)username StringField(用户名,validators(DataRequired(message请填写用户名),Length(min3,max10,message请输入3-10位的用户名)))nick_name StringField(昵称)email StringField(邮箱)password StringField(密码)phone StringField(电话)language StringField(语言)
6.完整代码
from tornado.web import Application, RequestHandler, URLSpec
from tornado.ioloop import IOLoop
import asyncio
import aiomysql
# 引入
from wtforms34 import UserFormclass IndexHandle(RequestHandler):# 首先由Application创建路由地址时携带参数传递会到initialize去定义一个self.mysql用于get中获取参数def initialize(self,mysql):self.mysql mysqlasync def get(self):print(self.mysql)# 获取1个客户端链接池async with aiomysql.create_pool(hostself.mysql.get(host),portself.mysql.get(port),userself.mysql.get(user),passwordself.mysql.get(pwd),dbself.mysql.get(db)) as pool:# 获取1个链接用来获取游标async with pool.acquire() as con:# 获取一个游标用来操作数据库async with con.cursor() as cur:# 执行sql# sql select 101sql select * from t_userawait cur.execute(sql)# 获取结果rs await cur.fetchone()print(rs)self.render(personal34.html,user rs)async def post(self):# 获取前端传递来的数据uname self.get_argument(username)nick_name self.get_body_argument(nick_name)email self.get_argument(email)password self.get_body_argument(password)phone self.get_argument(phone)language self.get_body_argument(language)# 建立表单对象uf UserForm(self.request.arguments)# 验证if not uf.validate():# 成功true 失败falseimport jsondata json.dumps(uf.errors, ensure_asciiFalse)self.write(data)else:try:# 获取idid self.get_body_argument(id)except Exception as e:id Falseargs [uname,nick_name,email,password,phone,language]# 链接数据库# 获取1个客户端链接池async with aiomysql.create_pool(hostself.mysql.get(host),portself.mysql.get(port),userself.mysql.get(user),passwordself.mysql.get(pwd),dbself.mysql.get(db)) as pool:# 获取1个链接用来获取游标async with pool.acquire() as con:# 获取一个游标用来操作数据库async with con.cursor() as cur:if not id:sql insert into t_user values(0, %s, %s, %s, %s, %s, %s)await cur.execute(sql, args) # 提交事务await con.commit()# 获取生成的idid cur.lastrowidelse:sql update t_user set uname%s, nick_name%s, email%s, pwd%s, phone%s, language%s where id%s# 增加id来告诉数据库更新哪一条数据args.append(id)await cur.execute(sql, args)await con.commit()# 存放id到args中args.insert(0,id)self.render(personal34.html, user args)if __name__ __main__:import os# 获取绝对路径base_path os.path.abspath(os.path.dirname(__file__))# 设置应用参数settings {template_path:os.path.join(base_path, templates),static_path: os.path.join(base_path, static),static_url_prefix: /static/,debug: True,# 为了方便数据库的修改可以直接把参数单独放在这mysql: {host: 127.0.0.1,port: 3306,user: root,pwd: root,db: tornado_db}}# 创建Tornado应用app Application([URLSpec(/,IndexHandle, {mysql:settings.get(mysql)})], **settings)# 设置监听端口号app.listen(8000)IOLoop.current().start()
错误信息解决
ImportError: cannot import name compat from wtformswtforms3.0.1 删除 pip uninstall wtforms下载旧版本pip install wtforms2.3.3