flask第三方外掛WTForms
阿新 • • 發佈:2018-12-19
在django中有ModelForm, 雖然flask原生沒有提供, 但是強大的第三方也提供了這樣的功能
雖然不如django的強大, 但是基本的功能還是可以有的, 下面就來使用一哈.
WTForms介紹
使用class的形式生成form表單, 並可以對提交的資料做檢驗, 然後對資料進行儲存
下載WTForms
使用WTForms
既然是使用class的形式, 那肯定要有一個class了
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))
引數解析
# message="" 資料不合格的提示資訊 # EqualTo("") 用於和某個欄位作比較 # default=(,) 預設值, 可以是一個或多個 # validators=[] 校驗規則 # render_kw={} 給標籤新增屬性, 比如class, style等 # widgets=widgets.PasswordInput 定義使用的外掛
在檢視中使用form類生成表單
在檢視中直接進行例項化, 生成的物件就要在頁渲染的form表單
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>