溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

什么是Flask第三方庫WTForms

發(fā)布時(shí)間:2020-08-26 15:29:33 來源:億速云 閱讀:445 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關(guān)什么是Flask第三方庫WTForms,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Web應(yīng)用程序的一個(gè)重要方面是為用戶提供一個(gè)用戶界面。 HTML提供了一個(gè)<form>標(biāo)簽,用于設(shè)計(jì)一個(gè)接口。 可以適當(dāng)使用表單的元素,如文本輸入,廣播,選擇等。通過GET或POST方法將用戶輸入的數(shù)據(jù)以Http請(qǐng)求消息的形式提交給服務(wù)器端腳本。

服務(wù)器端腳本必須從http請(qǐng)求數(shù)據(jù)重新創(chuàng)建表單元素。 所以實(shí)際上,表單元素必須被定義兩次 - 一次是HTML,一次是服務(wù)器端腳本。使用HTML表單的另一個(gè)缺點(diǎn)是很難(如果不是不可能)動(dòng)態(tài)地呈現(xiàn)表單元素。 HTML本身無法驗(yàn)證用戶的輸入。

這就是WTForms,一個(gè)靈活的表單,渲染和驗(yàn)證庫來得方便的地方。 Flask-WTF擴(kuò)展為這個(gè)WTForms庫提供了一個(gè)簡單的接口。

使用Flask-WTF,可以在Python腳本中定義表單域并使用HTML模板來呈現(xiàn)它們。 也可以將驗(yàn)證應(yīng)用于WTF字段。

Flask-WTF是簡化了WTForms操作的一個(gè)第三方庫。WTForms表單的兩個(gè)主要功能是驗(yàn)證用戶提交數(shù)據(jù)的合法性以及渲染模板。還有其它一些功能:CSRF保護(hù),文件上傳等。

安裝方法:

pip install flask-wtf

已安裝的軟件包包含一個(gè)Form類,該類必須用作用戶定義表單的父級(jí)。WTforms包包含各種表單域的定義。

下面列出了一些標(biāo)準(zhǔn)表單字段:

什么是Flask第三方庫WTForms

1.WTForms簡單驗(yàn)證

from flask import Flask,request,render_template
from wtforms import Form,StringField
from wtforms.validators import Length,EqualTo
app = Flask(__name__)
class RegistForm(Form):
    username = StringField(validators=[Length(min=3,max=10,message='用戶名必須在3到10位之間')])
    password = StringField(validators=[Length(min=6,max=10,message='密碼必須6到10位之間')])
    password_repeat = StringField(validators=[Length(min=6,max=10),
                                              EqualTo("password",message='密碼不一致')])
@app.route('/')
def hello_world():
    return 'Hello World!'
@app.route('/regist/',methods=['GET','POST'])
def regist():
    if request.method == 'GET':
        return render_template('regist.html')
    else:
        form = RegistForm(request.form)
        if form.validate():
            return 'success'
        else:
            print(form.errors)
            return 'fail'
if __name__ == '__main__':
    app.run()

2.WTForms常用驗(yàn)證器和自定義驗(yàn)證器

常用的驗(yàn)證器:

(1)Email:驗(yàn)證上傳的數(shù)據(jù)是否為郵箱格式

(2)EqualTo:兩個(gè)字段是否相等(密碼和重復(fù)密碼)

(3)InputRequired:原始數(shù)據(jù)的需要驗(yàn)證

(4)Length:長度限制,有mix和max兩個(gè)值

(5)NumberRange:數(shù)字的區(qū)間,有mix和max兩個(gè)值,如果在兩個(gè)值之間則滿足

(6)Regexp:自定義正則表達(dá)式

(7)URL:必須url格式

(8)UUID:uuid格式

from wtforms import Form,StringField,IntegerField
from wtforms.validators import Length,EqualTo,Email,InputRequired,NumberRange
from wtforms.validators import Regexp,URL,ValidationError
class LoginForm(Form):
    email = StringField(validators=[Email(message='郵箱格式不正確')])
    username = StringField(validators=[InputRequired(message='這個(gè)字段必須要填')])
    age = IntegerField(validators=[NumberRange(min=18,max=100)])
    phone = StringField(validators=[Regexp(r'1[38745]\d{9}')])
    homepage = StringField(validators=[URL()])
    captcha = StringField(validators=[Length(4,4)])
    # 自定義驗(yàn)證器
    def validate_captcha(self,field):
        if field.data != '1234':      #field.data:用戶提交過來的數(shù)據(jù)
            raise ValidationError('驗(yàn)證碼錯(cuò)誤')          #如果驗(yàn)證失敗,就拋出驗(yàn)證失敗的異常

3.使用wtforms渲染模板

 forms.py

class SettingsForm(Form):
    username = StringField(label="用戶名:",validators=[InputRequired(message='這個(gè)字段必須要填')])
    age = IntegerField('年齡:',validators=[NumberRange(min=18, max=100)])
    remeber = BooleanField('記住我')
    tags = SelectField('標(biāo)簽',choices=[(1,'python'),(2,'django')])

flask_wtforms_demo.py

@app.route('/settings/',methods=['GET','POST'])
def settings():
    if request.method == 'GET':
        form = SettingsForm()
        return render_template('settings.html',form=form)
    else:
        pass

settings.html

<form action="" method="post">
{#    括號(hào)里面可以添加樣式#}
    <p>{{ form.username.label }} {{ form.username(class="") }}</p>
    <p>{{ form.age.label }} {{ form.age() }}</p>
    <p>{{ form.remeber.label }} {{ form.remeber() }}</p>
    <p>{{ form.tags.label }} {{ form.tags() }}</p>
    <p><input type="submit" value="提交"></p>
</form>

什么是Flask第三方庫WTForms

看完上述內(nèi)容,你們對(duì)什么是Flask第三方庫WTForms有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI