Flask-wtf时Wtforms库的flask框架扩展,可以方便的处理Web表单html
使用flask-wtf时,每一个web表单都由一个继承自flask.ext.wtf.Form的类表示,每一个字段都由类中的属性表示,每一个字段能够附属多个验证函数web
from flask.ext.wtf import Form from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired,EqualTo class RegForm(Form): username = StringField('Username',validators=[DataRequired()]) password = PasswordField('password', validators=[DataRequired()]) password1 = PasswordField('confirm password', validators=[DataRequired(), EqualTo('password', 'password not match')
]) submit = SubmitField("submit")
这里定义了一个注册用户的表单,password1须要与password填写同样,字段的第一个属性是表单名,在validators中能够使用不一样的验证器数据库
向模版中传入一个表单实例来渲染表单flask
@app.route('/reg', methods=('GET', 'POST')) def reg(): form = RegForm() #验证表单输入内容是否符合要求 if form.validate_on_submit(): #获取表单提交的内容 return "name:%r,password:%r"%(form.username.data,form.password.data) return render_template('reg.html', form=form)
模版中bootstrap
<form action="" method="post" name="login"> {{form.hidden_tag()}} <p> Please enter your Name:<br> {{form.name(size=80)}}<br> </p> <p> Password:<br> {{ form.password }} </p> <p> Password:<br> {{ form.password1 }} </p> <p>{{ form.submit }}</p> </form>
form.hidden_tag() 模板参数将被替换为一个隐藏字段,用来是实如今配置中激活的 CSRF 保护。若是你已经激活了 CSRF,这个字段须要出如今你全部的表单中。app
Flask-Bootst 提供了快捷的表单显示函数,如可直接使用:框架
{% extends 'base.html' %} {% import 'bootstrap/wtf.html' as wtf%} {% block page_content %} {{ wtf.quick_form(form) }} {% endblock %}
能够自定义表单的验证方式,好比若是数据库已经有了一个用户名就不能再注册同名的用户了,函数
.... from wtforms import ValidationError .... class RegForm(Form): .... #验证username字段时会自动调用这个函数 def validate_username(self,field): if field.data == 'agmcs': #抛出的异常提示可做为提示显示 raise ValidationError("the username is already exist")
class EditProfileAdminForm(Form): role = SelectField('Role', coerce=int) #在构造化Form实例时指定selectField的choices内容, def __init__(self, *args, **kwargs): super(EditProfileAdminForm, self).__init__( *args, **kwargs) self.role.choices = [(role.id, role.name) for role in Role.query.order_by(Role.name).all()] #choices须要一个列表里面包含数个键值对应的元组 #也能够在初始化后使用form.role.choices = [(role.id, role.name) for role in Role.query.order_by(Role.name).all()] 来添加选项
没有使用Flask-bootstrap的话能够使用以下代码显示:post
<div class="form-group" id='cg-{{form.role.id}}'> {{form.role.label(class='col-lg-2 control-label',for=form.role.id)}} <div class="col-lg-9"> {{form.role(class='form-control')}} <span class="help-block" id='hl-{{form.role.id}}'></span> </div> </div
刚才须要在flask-admin中替换TextArea为CKEDitor,这样就只能在代码中替换,但是ckeditor须要将textarea的class设置成ckedtor,上网查了一下,能够本身定义一个控件属性ui
明天写//