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
明天寫//