在django中有ModelForm, 雖然flask原生沒有提供, 可是強大的第三方也提供了這樣的功能html
雖然不如django的強大, 可是基本的功能仍是能夠有的, 下面就來使用一哈.django
使用class的形式生成form表單, 並能夠對提交的數據作檢驗, 而後對數據進行保存flask
既然是使用class的形式, 那確定要有一個class了post
from wtforms import Form # 要繼承的類
from wtforms.fields import simple, core # 這裏麪包含了生成的DOM, 好比input, redio, select等
from wtforms import validators, widgets # 校驗器, 插件
class RegisterForm(Form): username = simple.StringField(label="username", validators=[validators.DataRequired(message="不能爲空"),validators.Length(min=5, max=6,message="長度必須大於5位,小於6位")],render_kw={"class": "username"}) password = simple.PasswordField(label="password", validators=[validators.DataRequired(message="不能爲空"), validators.Length(min=5, max=5, message="長度必須大於5位,小於6位")]) repeat_password = simple.PasswordField(label="repeat", validators=[validators.EqualTo("password", message="密碼不一致")]) gender = core.RadioField(label="gender", validators=None, coerce=int, choices=((1, "男"), (2, "女")), default=1) hobby = core.SelectMultipleField(label="hobby", validators=None, coerce=int,choices=((1, "吃飯"), (2, "睡覺"), (3, "打豆豆")), default=(1, 3))
參數解析ui
# message="" 數據不合格的提示信息 # EqualTo("") 用於和某個字段做比較 # default=(,) 默認值, 能夠是一個或多個 # validators=[] 校驗規則 # render_kw={} 給標籤添加屬性, 好比class, style等 # widgets=widgets.PasswordInput 定義使用的插件
在視圖中直接進行實例化, 生成的對象就要在頁渲染的form表單spa
class RegisterView(views.MethodView): def get(self): form_obj = RegisterForm() # 實例表單對象 return render_template("register.html", form_obj=form_obj) # 傳進模板 def post(self): form_obj = RegisterForm(request.form) # 將數據傳到form表單對象進行校驗 if form_obj.validate(): # 判斷校驗的結果 return "OK" else: return render_template("register.html", form_obj=form_obj) # 當字段校驗不合格時, 每一字段中就會有對象的error提示
<form action="" method="post" novalidate> {# 傳進來的是form類對象, 循環這個對象就能夠依次取出你全部定義的全部的字段(類屬性)#} {% for foo in form_obj %} <p>{{ foo.label }}{{ foo }}{{ foo.errors.0 }}</p> {# label: 填寫項的提示信息, 如用戶名#} {# foo: 定義的標籤, 如input標籤#} {# foo.errors.0 : 校驗不合格的錯誤信息, 通常一個字段會有多個錯誤信息, 只要顯示其中一個就好, 其實就是一個列表 .0 表示索引取第一個#} {% endfor %} <input type="submit"> </form>