当前位置: 首页 > news >正文

6.Flask-WTForms

 Flask-WTF是简化了WTForms操作的一个第三方库。WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。还有其它一些功能:CSRF保护,

文件上传等。安装方法:pip install flask-wtf

1.1.WTForms简单验证

from flask import Flask,request,render_template
from wtforms import Form,StringField
from wtforms.validators import Length,EqualTo

app = Flask(__name__)

class RegistForm(Form):
    username = StringField(validators=[Length(min=3,max=10,message='用户名必须在3到10位之间')])
    password = StringField(validators=[Length(min=6,max=10,message='密码必须6到10位之间')])
    password_repeat = StringField(validators=[Length(min=6,max=10),
                                              EqualTo("password",message='密码不一致')])

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/regist/',methods=['GET','POST'])
def regist():
    if request.method == 'GET':
        return render_template('regist.html')
    else:
        form = RegistForm(request.form)
        if form.validate():
            return 'success'
        else:
            print(form.errors)
            return 'fail'

if __name__ == '__main__':
    app.run()

 

 1.2.WTForms常用验证器和自定义验证器

 常用的验证器

  • Email:验证上传的数据是否为邮箱格式
  • EqualTo:两个字段是否相等(密码和重复密码)
  • InputRequired:原始数据的需要验证
  • Length:长度限制,有mix和max两个值
  • NumberRange:数字的区间,有mix和max两个值,如果在两个值之间则满足
  • Regexp:自定义正则表达式
  • URL:必须url格式
  • UUID:uuid格式
from wtforms import Form,StringField,IntegerField
from wtforms.validators import Length,EqualTo,Email,InputRequired,NumberRange
from wtforms.validators import Regexp,URL,ValidationError


class LoginForm(Form):
    email = StringField(validators=[Email(message='邮箱格式不正确')])
    username = StringField(validators=[InputRequired(message='这个字段必须要填')])
    age = IntegerField(validators=[NumberRange(min=18,max=100)])
    phone = StringField(validators=[Regexp(r'1[38745]\d{9}')])
    homepage = StringField(validators=[URL()])
    captcha = StringField(validators=[Length(4,4)])

    # 自定义验证器
    def validate_captcha(self,field):
        if field.data != '1234':      #field.data:用户提交过来的数据
            raise ValidationError('验证码错误')          #如果验证失败,就抛出验证失败的异常

 

1.3.使用wtforms渲染模板

 forms.py

class SettingsForm(Form):
    username = StringField(label="用户名:",validators=[InputRequired(message='这个字段必须要填')])
    age = IntegerField('年龄:',validators=[NumberRange(min=18, max=100)])
    remeber = BooleanField('记住我')
    tags = SelectField('标签',choices=[(1,'python'),(2,'django')])

flask_wtforms_demo.py

@app.route('/settings/',methods=['GET','POST'])
def settings():
    if request.method == 'GET':
        form = SettingsForm()
        return render_template('settings.html',form=form)
    else:
        pass

settings.html

<form action="" method="post">
{#    括号里面可以添加样式#}
    <p>{{ form.username.label }} {{ form.username(class="") }}</p>
    <p>{{ form.age.label }} {{ form.age() }}</p>
    <p>{{ form.remeber.label }} {{ form.remeber() }}</p>
    <p>{{ form.tags.label }} {{ form.tags() }}</p>
    <p><input type="submit" value="提交"></p>
</form>

 

相关文章:

  • phpstrom+upupw 开启 Xdebug 调试
  • Python爬虫常用库的安装
  • 非 root 用户全局安装和配置 NodeJS
  • MYSQL性能优化的最佳20+条经验
  • 6.kotlin安卓实践课程-用kotlin写第一个activity对应P层
  • MHA源码分析——环境部署
  • 你需要了解的23种JavaScript设计模式
  • 2018-06-01Linux学习
  • 调查:市面上你知道有哪几款APP支持这个功能?
  • Python将SQL server 数据库导入到mongoDB数据库中
  • 多线程 - wait、notify
  • STP的算法与PVST+实现负载均衡
  • linux用户和权限详解
  • python---list列表、元组
  • 回归初始互联网手机核心档位初心 荣耀Play性能真旗舰再出发
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 11111111
  • codis proxy处理流程
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • EventListener原理
  • IDEA常用插件整理
  • in typeof instanceof ===这些运算符有什么作用
  • javascript从右向左截取指定位数字符的3种方法
  • js学习笔记
  • Markdown 语法简单说明
  • PAT A1092
  • php ci框架整合银盛支付
  • session共享问题解决方案
  • uni-app项目数字滚动
  • 测试如何在敏捷团队中工作?
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 利用DataURL技术在网页上显示图片
  • 如何学习JavaEE,项目又该如何做?
  • 深度解析利用ES6进行Promise封装总结
  • 试着探索高并发下的系统架构面貌
  • 微信开源mars源码分析1—上层samples分析
  • 栈实现走出迷宫(C++)
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • (6)添加vue-cookie
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (第一天)包装对象、作用域、创建对象
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (转)VC++中ondraw在什么时候调用的
  • (转)项目管理杂谈-我所期望的新人
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET 8.0 发布到 IIS
  • .Net多线程总结