zoukankan      html  css  js  c++  java
  • Flask之WTF

    Flask-WTF是什么?

    是一个关于表单的扩展库,可以自动生成表单的HTML代码和验证提交的表单数据,并且提供跨站请求伪造(Cross-Site Request Forgery)保护的功能,使用非常方便

    使用步骤:

      1.创建表单类,实例化对象

      2.在模板中使用该对象

      3.在试图函数中处理表单

    定义表单类

    从 flask_wtf  进口 FlaskForm 
    从 wtforms  导入 StringField 
    从 wtforms.validators  导入 DataRequired
    
    class  MyForm (FlaskForm ):
        name  =  StringField ('name' , validators = [ DataRequired ()])
    

    添加视图函数

    @app.route('/')
    def index():
        # 创建表单对象
        form = NameForm()
        # 渲染时分配到模板文件
        return render_template('form.html', form=form)
    

    表单渲染

    {# 原生渲染 #}
    {# 判断是否有错误#}
    {% if form.name.errors %}
      {{ form.name.errors[0] }}
    {% endif %}
    <h1>Hello {{ name }}</h1>
    <form action="{{ url_for('wtform') }}" method="post" >
    # {{form.hidden_tag()}}里面放的也就是csrf_token
      {{ form.csrf_token }}
      {{ form.name.label() }}{{ form.name(id='xx',class='yyy') }}
      {{ form.submit() }}
    </form>
    ​
    {# bootstrap渲染 #}
    {% extends 'bootstrap/base.html' %}
    {% import 'bootstrap/wtf.html' as wtf %}
    {% block content %}
       <div class="container">{{ wtf.quick_form(form) }}</div>
    {% endblock %}

    表单校验

    @app.route('/', methods=['GET', 'POST'])
    def index():
       # 创建表单对象
       form = NameForm()
       name = None
       # 表单校验
       if form.validate_on_submit():
           # 通过校验,则取出数据
           name = form.name.data
           form.name.data = ''
       # 渲染时分配到模板文件
       return render_template('form.html', form=form, name=name)
    POST重定向GET解决重复提交的问题
    
    
    @app.route('/wtform/', methods=['GET','POST'])
    def wtform():
       form = MyForm()
       # 判断form表单中的数据是否通过校验
       if form.validate_on_submit():
           # 通过校验,则取出数据。
           name = form.name.data
           last_name = session.get('name') or None
           # 判断这次提交的name是否和上次的相等
           if last_name and last_name == name:
               return '老铁别重复提交了'
           else:
               # 不是重复提交,设置session
               session['name'] =  name
               return render_template('wtform.html',form=form, name=name)
       return render_template('wtform.html', form=form)

    常见字段类型

    字段类型	说明
    StringField	普通文本字段
    PasswordField	密码文本字段
    SubmitField	提交按钮
    HiddenField	隐藏文本字段
    TextAreaField	多行文本字段
    DateField	文本字段,datetime.date格式
    DateTimeField	文本字段,datetime.datetime格式
    IntegerField	文本字段,整数类型
    FloatField	文本字段,小数类型
    BooleanField	复选框,值为True或False
    RadioField	单选框
    SelectField	下拉列表
    FileField	文件上传字段

    常见验证器类

    验证器	说明
    DataRequired	确保字段有值(并且if判断为真)
    Email	邮箱地址
    IPAddress	IPv4的IP地址
    Length	规定字符长度
    NumberRange	输入数值的范围
    EqualTo	验证两个字段的一致性
    URL	有效的URL
    Regexp	正则验证
    自定义字段验证:就是写一个'validate_字段'的函数,如下:
    
    
    class NameForm(FlaskForm):
       name = StringField('用户名', validators=[DataRequired()])
       submit = SubmitField('提交')
    ​
       # 自定义字段验证
       def validate_name(self, field):
          if len(field.data) < 6:
              raise ValidationError('用户名长度不能少于6个字符')
    

      

  • 相关阅读:
    SpringCloud Alibaba Nacos详解
    常见设计模式
    Mybatis TypeHandler类型处理器
    Mybatis存取json字段转为Java对象方案
    Spring AOP 切面编程详解
    Spring Data 、Spring Data JPA 、Hibernate之间的关系及SpringDataJPA简单使用
    28张图解 | 互联网究竟是「如何连接,如何进行通信」的?
    Java代码实现 图片添加多行水印且自动换行
    SpringMVC 快速入门
    获取本地磁盘得到.txt文件
  • 原文地址:https://www.cnblogs.com/xinjie123/p/11018999.html
Copyright © 2011-2022 走看看