1. 程式人生 > >flask第三方外掛WTForms

flask第三方外掛WTForms

在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>