flask基础之WTForm表单

表单(Form),常见的web功能。

直接通过请求上下文获取客户端数据进行解析,代码较繁杂,用WTForm可以简化处理,WTForm组成:

1.Form类

  所有开发者自定义的表单需要继承自Form类或其子类

  Form类最主要的功能是通过其所包含的Filed类提供对表单内数据的快捷访问方式。

2.Filed

  即字段,WTForm定义了若干个Field类型,每个Filed类型对应一种HTML imput标签控件

  比如 SubmitFiled 用于显示和获取<input type="submit">标签数据

3.Validator

  验证器。用于验证用户在客户端输入的数据,当不符合时提示。

实践:

一、定义表单

  from flask.ext.wtf import From

  from wtforms import HiddenField ,DateTimeField,StringField,TexAreaField,BooleanField,FileField

  class testForm():

    id = HiddenField ('xxx')

    date=DateTimeField ('xxx')

    title =StringField('xxx')

    content=TexAreaField('xxx')

    valid=BooleanField('xxx')

    source=StringField('xxx')

    author=StringField('xxx')

    image=FileField('xxx')

如果有公告的表单属性,可以提炼一个基类表单

二、显示表单:有了表单,如何显示

  需要编辑"视图响应、路由映射""模板"2个文件

  a.视图响应、路由映射,在Flask路由映射函数中实例化表单类,并且作为参数传递给render_template

  @app.route('/XXX/view_test',methods=['GET','POST'])

  def view_test():

    form=TestForm(request.form)

    return render_template('xx.html',form=form)

  

  b.模板文件

  主要是将WTForm表单字段嵌入需要显示的位置

  ...

  <form action='' method='' name='' enctype='multipart/form-data'>

    {{form.hidden_tag()}}

  ...

  <div>

    {{render_field(form.title,size=10)}}

  </div>

  ...

  </form>

  ...

三、获取表单数据

  当用户在浏览器中填写表单数据并submit后,在服务器端重新实例化一个WTForm的对象可以直接获取用户在客户端输入的内容。

  @app.route(...)

  def view_test():

  form=testForm(request.form)

    if request.method=“POST” and form.validate():

       if form.id.data:

        test=orm.test.query.get(int(form.id.data))  #通过字段的data获取数据

        ......

        orm.db.session.commit()

        else:

        test=orm.test(form.dt.data,...)

        orm.db.session.add(test)

        orm.db.session.commit()

        form.id.data=test.id

猜你喜欢

转载自www.cnblogs.com/czdbky/p/9461573.html