本案例通过实现一个注册页面的编写,来带你了解FLASK-WTF的运用.

  

  主要功能为表单基础的功能--手机号码必须为11位数,且通过数据库查找不能有已经注册的了,密码要求输入两遍且必须一样,且所有内容不能为空的提示等内容.那么现在就开始把!

  

  一.创建表单类.

    首先运用flask-wtf你必须确保你的环境中已经安装wtf,如果你是python3的环境,我们可以通过 pip3 install Flask-WTF 来进行安装.

    安装好了之后我们来进行导入:    

      from flask_wtf import Form
      from wtforms import StringField, SubmitField, PasswordField, ValidationError
      from wtforms.validators import DataRequired, EqualTo, Length
      from models import USER

    

    让我们一步步来理解!!

    

    第一行代码我们从 falsk-wtf 中导入了 Form 类,以后我们创建的所有表单类都要继承自这个类.

    第二行代码我们从 wtforms  中导入了 StringField,SubmitField,PasswordField,ValidationError ,那么这些东西是用来干什么的呢?我相信如果稍微过一些HTML的人应该都认识HTML表单中<input>元素的type="text",type="submit",type="password"这类属性吧.原理是一样的.

    第三行代码我们又从 wtforms.validators 中导入了 DataRequired,EqualTo,Length ,其中 DataRequired用来验证表单数据不能为空, EqualTo 常用来比较两个代码是不是相等, Length 用来限制字符长度.

    第四行代码是导入数据库模型的USER类,用来查询数据库中是不是已经注册了手机号.如果已经注册了,再用第二行代码的 ValidationError 来抛出警告.

    

    实例如下:      

    class Regist(Form):
     phone = StringField("请输入手机号", validators=[DataRequired(), Length(min=11, max=11, message="手机号码是11位数")])
     name = StringField("请输入用户名", validators=[DataRequired()])
     password = PasswordField("请输入密码", validators=[DataRequired()])
     password1 = PasswordField("请重复密码", validators=[DataRequired(), EqualTo("password", "密码必须一样")])
     submit = SubmitField("立即提交")      def validate_phone(self, field):
     if USER.query.filter_by(phone=field.data).first():
    raise ValidationError("傻子,你的手机号码被注册了!!")

     如此一个注册表单类就建立成功了!!

  

 二.视图函数中编写逻辑

    我先直接把代码列出来:     

      # 注册界面
      @app.route("/regist/", methods=["GET", "POST"])
      def regist():
      form = Regist()
       if form.validate_on_submit():
      telephone = form.phone.data
      username = form.name.data
      password = form.password.data
      if form.validate_phone():
      user = USER(phone=telephone, name=username, password=password)
      db.session.add(user)
      db.session.commit()
      return redirect(url_for("login"))
      else:
      return render_template("regist.html", form=form)

       

      我们先用  form=Regist() 实例化一个表单类的对象,后面紧跟着一个条件语句, validate_on_submit 意思是判断表单内的数据是不是为空,最大长度是不是....等先前设置的限制条件以及判断表单内容是不是提交过了.如果是,那么就意味着我们提交了表单数据,并且进行后面的操作,如果不是.就意味着我们只是打开了这个注册页面,用 return render_template("regist.html", form=form)  渲染模板,并且把实例化的对象form作为参数传递到模板中.

      

      我们接着继续提交表单后的代码理解 telephone = form.phone.data    username = form.name.data   password = form.password.data  这三行代码是获取用户填写的手机号,用户名,密码这些数据.

      

      获取之后,我们在进行判断.调用注册表单类的validate_phone()函数,如果忘记内容可以再看看上面.如果为true,就代表着这个手机号没有被注册,继续进行后面的把用户填写的数据存进数据库的操作.

        user = USER(phone=telephone, name=username, password=password)

      

      这段代码的意思是USER用户表中有phone,name,password的属性.我们把获取的用户数据telephone,username,password赋值给它,在通过 db.session.add(user) db.session.commit() 这两行代码提交到数据库中.

      

      数据库中是用到了flask-sqlalchemy,这里不做具体讲解,以后有机会再讲.我把代码贴出来:         

lass USER(db.Model):
__tablename__="user"
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
phone=db.Column(db.String(11),nullable=False)
name=db.Column(db.String(50),nullable=False)
password=db.Column(db.String(100),nullable=False)

   

 三.在模板中运用

      第三步也是最后一步.如果你的项目运用了flask-bootstrap的话,可以通过:         

        {% import "bootstrap/wtf.html" as wtf %}

        <form action="" method="post">
      {% block page_content %}
        {{ wtf.quick_form(form) }}
      {% endblock %}
       </form>

      

      wtf.quick_form(form)直接生成表单,是不是很方便?当然没有样式,如果你要添加样式的话可以这样:        

          <form method="POST">
            {{ form.hidden_tag() }}
            {{ form.name.label }} {{ form.name(id='my-text-field') }}
            {{ form.submit() }}
            </form>

      

      好了,到这里就结束了.如果你把这些全弄懂了,你还可以直接阅读它的中文文档.

                                                              待续..........

从一个实例学习----FLASK-WTF的更多相关文章

  1. Flask - WTF和WTForms创建表单

    目录 Flask - WTF和WTForms创建表单 一. Flask-WTF 1.创建基础表单 2.CSRF保护 3.验证表单 4.文件上传 5.验证码 二. WTForms 1. field字段 ...

  2. 从docker到docker-compose部署一个nginx+flask+mysql+redis应用

    目的是把一个flask项目的mysql数据库.redis数据库.flask应用.nginx服务分别装到四个容器中,然后用docker-compose命令同时启动与关闭 一.安装docker Docke ...

  3. 关于一个flask的服务接口实战(flask-migrate,flask-script,SQLAlchemy)

    前言 最近接到一个接收前端请求的需求,需要使用python编写,之前没有写过python,很多技术没有用过,在这里做一个学习记录,如有错误,请不了赐教. Flask Api文档管理 使用Falsk A ...

  4. 【Flask系列】开发一个简单的Flask程序

    知识点 初始化:每一个flask程序都必须创建一个程序实例,遵循WSGI(Web Server Gateway interface)协议,把请求->flask Obj; 创建实例: app = ...

  5. Python轻量Web框架Flask使用

    http://blog.csdn.net/jacman/article/details/49098819 目录(?)[+] Flask安装 Python开发工具EclipsePyDev准备 Flask ...

  6. [Python][flask][flask-login]关于flask-login中各种API使用实例

    本篇博文跟上一篇[Python][flask][flask-wtf]关于flask-wtf中API使用实例教程有莫大的关系. 简介:Flask-Login 为 Flask 提供了用户会话管理.它处理了 ...

  7. 【Flask】 结合wtforms的文件上传表单

    表单中的文件上传 基本的表单渲染,表单类设置等等就不多说了,参看另一个文章即可.但是那篇文章里没有提到对于FileField,也就是上传文件的表单字段是如何处理,后端又是如何实现接受上传过来的文件的. ...

  8. Flask 学习篇二:学习Flask过程中的记录

    Flask学习笔记: GitHub上面的Flask实践项目 https://github.com/SilentCC/FlaskWeb 1.Application and Request Context ...

  9. Flask 入门(第一篇)

    1. 认识 Flask Flask 是一个微型 Web 框架,依赖于 jinjia2 模板系统和 Werkzeug WSGI(本质为 Socket 服务端) 服务,默认情况不支持数据库抽象层.表单验证 ...

随机推荐

  1. [学习OpenCV攻略][007][缩小图片]

    cvPryDown(输入图片,输出图片) 根据输出图片的大小,把输入图片进行压缩 cvPryUp(输入图片,输出图片) 根据输出图片的大小,把输入图片进行放大 #include "cv.h& ...

  2. ES6中promise的使用方法

    先看看ES5中异步编程的使用. let ajax = function (callBlack) { setTimeout(function () { callBlack && call ...

  3. iOS微信自动抢红包插件(支持后台和锁屏下抢红包)

    前言:本文主要讲述使用hook方式实现红包插件,涉及到tweak相关知识,如果你不想了解具体实现细节可直接到我的Github地址参考安装(包含越狱和非越狱两种方法)   转眼间2017即将过去,又到了 ...

  4. Laravel5中使用阿里大于(鱼)发送短信验证码

    在做用户注册和个人中心的安全管理时,我实现借助第三方短信平台(阿里大于(鱼))在Laravel框架中进行手机验证的设置:阿里大于,是阿里通信旗下优质便捷的云通信服务平台,整合了三大运营商的通信能力,为 ...

  5. Yourphp是一款完全开源免费的.核心采用了Thinkphp框架

    Yourphp企业网站管理系统,是一款完全开源免费的PHP+MYSQL系统.核心采用了Thinkphp框架,同时也作为开源软件发布.集众多开源项目于一身的特点,使本系统从安全,效率,易用及可扩展性上更 ...

  6. DEDECMS系统安全篇之移data目录到Web根目录以外听语音

    http://jingyan.baidu.com/article/ad310e80aeb0971849f49e8e.html 主要三个步骤: 1./include/common.inc.php 2.还 ...

  7. 三续ASM

    在ASM的Core API中使用的是访问者模式来实现对类的操作,主要包含如下类: 一.ClassVisitor接口: 在这个接口中主要提供了和类结构同名的一些方法,这些方法可以对相应的类结构进行操作. ...

  8. Velocity动态拼接字符串

    1.在全局定义一个变量: #set($varName = "") 2.拼接字符串病截取字符串: #foreach( $role in $adminUser.roles) #set( ...

  9. awk -f program.file 功能使用

    一.awk -f program.file 功能使用 一直没有使用过awk的-f功能,感觉鸡肋,不是很实用,更多的是因为没有需求的原因 下面介绍下awk -f的使用方法 awk可以指定默认的文件路径, ...

  10. zabbix_sender用法实例

    环境centos6.8 zabbix版本3.2.4 需求: 要远程监控一台服务器A,但只能通过远程服务器连接本地服务器B,但B不能主动连A(因为A没有固定公网ip) 使用了zabbix_agent的a ...