Flask-WTF是簡化了WTForms操做的一個第三方庫。WTForms表單的兩個主要功能是驗證用戶提交數據的合法性以及渲染模板。還有其它一些功能:CSRF保護,html
文件上傳等。安裝方法:pip install flask-wtfpython
from flask import Flask,request,render_template from wtforms import Form,StringField from wtforms.validators import Length,EqualTo app = Flask(__name__) class RegistForm(Form): username = StringField(validators=[Length(min=3,max=10,message='用戶名必須在3到10位之間')]) password = StringField(validators=[Length(min=6,max=10,message='密碼必須6到10位之間')]) password_repeat = StringField(validators=[Length(min=6,max=10), EqualTo("password",message='密碼不一致')]) @app.route('/') def hello_world(): return 'Hello World!' @app.route('/regist/',methods=['GET','POST']) def regist(): if request.method == 'GET': return render_template('regist.html') else: form = RegistForm(request.form) if form.validate(): return 'success' else: print(form.errors) return 'fail' if __name__ == '__main__': app.run()
經常使用的驗證器正則表達式
from wtforms import Form,StringField,IntegerField from wtforms.validators import Length,EqualTo,Email,InputRequired,NumberRange from wtforms.validators import Regexp,URL,ValidationError class LoginForm(Form): email = StringField(validators=[Email(message='郵箱格式不正確')]) username = StringField(validators=[InputRequired(message='這個字段必需要填')]) age = IntegerField(validators=[NumberRange(min=18,max=100)]) phone = StringField(validators=[Regexp(r'1[38745]\d{9}')]) homepage = StringField(validators=[URL()]) captcha = StringField(validators=[Length(4,4)]) # 自定義驗證器 def validate_captcha(self,field): if field.data != '1234': #field.data:用戶提交過來的數據 raise ValidationError('驗證碼錯誤') #若是驗證失敗,就拋出驗證失敗的異常
forms.pydjango
class SettingsForm(Form): username = StringField(label="用戶名:",validators=[InputRequired(message='這個字段必需要填')]) age = IntegerField('年齡:',validators=[NumberRange(min=18, max=100)]) remeber = BooleanField('記住我') tags = SelectField('標籤',choices=[(1,'python'),(2,'django')])
flask_wtforms_demo.pyflask
@app.route('/settings/',methods=['GET','POST']) def settings(): if request.method == 'GET': form = SettingsForm() return render_template('settings.html',form=form) else: pass
settings.htmlapp
<form action="" method="post"> {# 括號裏面能夠添加樣式#} <p>{{ form.username.label }} {{ form.username(class="") }}</p> <p>{{ form.age.label }} {{ form.age() }}</p> <p>{{ form.remeber.label }} {{ form.remeber() }}</p> <p>{{ form.tags.label }} {{ form.tags() }}</p> <p><input type="submit" value="提交"></p> </form>