Flask-WTF進階和WTForms擴充套件

發表於2016-03-03

Flask-WTFFlask-SQLAlchemy都是很好用的外掛,然而當它們結合到一起後,就不是那麼美妙了。

問題的提出

models.py中定義了一個ArticleCategoryTag類:

 

然後在forms.py中定義一個ArticleForm表單

此時在處理表單的時候可以這樣:

等等,這樣怎麼處理form.data.tags?只有像下面這樣寫了:

然後在上面的程式碼中加入:

這樣是不是很難看,像form.data.category就是一個物件,為撒到form.data.tags了就不是了,還要專門寫一個函式來坐一個轉換?這個時候就有必要擴充套件WTForms中的表單了。

WTForms入門

閱讀WTForms文件,關於如何建立一個TagListField,貼一下程式碼:

簡單了看了一下WTForms原始碼,大致搞清楚了上面程式碼兩個方法的作用:

  1. _value The _value method is called by the TextInput widget to provide the value that is displayed in the form. 在初始化表單的時候,就是呼叫這個方法在表單中渲染資料
  2. process_formdata 表單提交時,處理該欄位的資料。

編寫WTForm擴充套件

根據上面的程式碼,將TagListField中的字串轉為models.py中定義的Tag物件即可:

主要就是在process_formdata這一步處理表單的資料,將字串轉換為需要的資料。最終就可以在forms.py中這樣定義表單了:

views.py中處理表單就很方便了:

程式碼是不是很簡潔了?^_^。。。

當然了寫一個完整的WTForms擴充套件還是很麻煩的。這裡只是剛剛入門。可以看官方擴充套件QuerySelectField的原始碼。。。

最終效果

 

相關文章