flask第三方插件WTForms

在django中有ModelForm, 雖然flask原生沒有提供, 可是強大的第三方也提供了這樣的功能html

雖然不如django的強大, 可是基本的功能仍是能夠有的, 下面就來使用一哈.django

 

WTForms介紹

使用class的形式生成form表單, 並能夠對提交的數據作檢驗, 而後對數據進行保存flask

 

下載WTForms 

 

使用WTForms

既然是使用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類生成表單

在視圖中直接進行實例化, 生成的對象就要在頁渲染的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>
相關文章
相關標籤/搜索