摘要:特別是可以訪問請求提交的表單數(shù)據(jù)。表單的代碼生成和驗(yàn)證提交的表單數(shù)據(jù)就是兩個(gè)很好的例子。優(yōu)勢擴(kuò)展使得處理表單能獲得更愉快的體驗(yàn)。設(shè)計(jì)了表單庫來使可以更加簡便地管理操作表單數(shù)據(jù)。
1. 為什么使用Flask-WTF?
request對象公開了所有客戶端發(fā)送的請求信息。特別是request.form可以訪問POST請求提交的表單數(shù)據(jù)。 盡管Flask的request對象提供的支持足以處理web表單,但依然有許多任務(wù)會變得單調(diào)且重復(fù)。 表單的HTML代碼生成和驗(yàn)證提交的表單數(shù)據(jù)就是兩個(gè)很好的例子。
優(yōu)勢:
Flask-WTF擴(kuò)展使得處理web表單能獲得更愉快的體驗(yàn)。該擴(kuò)展是一個(gè)封裝了與框架無關(guān)的WTForms包的Flask集成。2. 什么是表單處理?
在網(wǎng)頁中,為了和用戶進(jìn)行信息交互總是不得不出現(xiàn)一些表單。 flask設(shè)計(jì)了WTForm表單庫來使flask可以更加簡便地管理操作表單數(shù)據(jù)。 WTForm中最重要的幾個(gè)概念如下: 1). Form類,開發(fā)者自定義的表單必須繼承自Form類或者其子類。 Form類最主要的功能是通過其所包含的Field類提供對表單內(nèi)數(shù)據(jù)的快捷訪問方式。 2). 各種Field類,即字段。一般而言每個(gè)Field類都對應(yīng)一個(gè)input的HTML標(biāo)簽。 比如WTForm自帶的一些Field類比如BooleanField就對應(yīng), SubmitField就對應(yīng)等等。 3). Validator類。這個(gè)類用于驗(yàn)證用戶輸入的數(shù)據(jù)的合法性。 比如Length驗(yàn)證器可以用于驗(yàn)證輸入數(shù)據(jù)的長度, FileAllowed驗(yàn)證上傳文件的類型等等。
另外,flask為了防范csfr(cross-site request forgery)攻擊, 默認(rèn)在使用flask-wtf之前要求app一定要設(shè)置過secret_key。 最簡單地可以通過app.config["SECRET_KEY"] = "xxxx"來配置。
3. 常見的Field類PasswordField 密碼字段,自動將輸入轉(zhuǎn)化為小黑點(diǎn)
DateField 文本字段,格式要求為datetime.date一樣
IntergerField 文本字段,格式要求是整數(shù)
DecimalField 文本字段,格式要求和decimal.Decimal一樣
FloatField 文本字段,值是浮點(diǎn)數(shù)
BooleanField 復(fù)選框,值為True或者False
RadioField 一組單選框
SelectField 下拉列表,需要注意一下的是choices參數(shù)確定了下拉選項(xiàng),
但是和HTML中的
MultipleSelectField 可選多個(gè)值的下拉列表
Validator驗(yàn)證函數(shù)Validator是驗(yàn)證函數(shù),把一個(gè)字段綁定某個(gè)驗(yàn)證函數(shù)之后,flask會在接收表單中的數(shù)據(jù)之前對數(shù)據(jù)做一個(gè)驗(yàn)證, 如果驗(yàn)證成功才會接收數(shù)據(jù)。驗(yàn)證函數(shù)Validator如下,具體的validator可能需要的參數(shù)不太一樣,這里只給出 一些常用的,更多詳細(xì)的用法可以參見wtforms/validators.py文件的源碼,參看每一個(gè)validator類需要哪些參數(shù):
*基本上每一個(gè)validator都有message參數(shù),指出當(dāng)輸入數(shù)據(jù)不符合validator要求時(shí)顯示什么信息。
Email 驗(yàn)證電子郵件地址的合法性,要求正則模式是^.+@(12+)$
EqualTo 比較兩個(gè)字段的值,通常用于輸入兩次密碼等場景,可寫參數(shù)fieldname,不過注意其是一個(gè)字符串變量,指向同表單中的另一個(gè)字段的字段名
IPAddress 驗(yàn)證IPv4地址,參數(shù)默認(rèn)ipv4=True,ipv6=False。如果想要驗(yàn)證ipv6可以設(shè)置這兩個(gè)參數(shù)反過來。
Length 驗(yàn)證輸入的字符串的長度,可以有min,max兩個(gè)參數(shù)指出要設(shè)置的長度下限和上限,注意參數(shù)類型是字符串,不是INT!!
NumberRange 驗(yàn)證輸入數(shù)字是否在范圍內(nèi),可以有min和max兩個(gè)參數(shù)指出數(shù)字上限下限,注意參數(shù)類型是字符串,不是INT!!然后在這個(gè)validator的message參數(shù)里可以設(shè)置%(min)s和%(max)s兩個(gè)格式化部分,來告訴前端這個(gè)范圍到底是多少。其他validator也有這種類似的小技巧,可以參看源碼。
Optional 無輸入值時(shí)跳過同字段的其他驗(yàn)證函數(shù)
Required 必填字段
Regexp 用正則表達(dá)式驗(yàn)證值,參數(shù)regex="正則模式"
URL 驗(yàn)證URL,要求正則模式是^[a-z]+://(?P
AnyOf 確保值在可選值列表中。參數(shù)是values(一個(gè)可選值的列表)。特別提下,和SelectField進(jìn)行配合使用時(shí),不知道為什么SelectField的choices中項(xiàng)的值不能是數(shù)字。。否則AnyOf的values參數(shù)中即使有相關(guān)數(shù)字也無法識別出當(dāng)前選項(xiàng)是合法選項(xiàng)。我懷疑NoneOf可能也是一樣的套路。
NoneOf 確保值不在可選值列表中
#forms.py文件:用來設(shè)定規(guī)則 from flask_wtf import FlaskForm from flask_wtf.file import FileRequired, FileAllowed from wtforms import StringField, PasswordField, SubmitField, FileField from wtforms.validators import DataRequired, Length class LoginForm(FlaskForm): name = StringField( label="用戶名/郵箱/手機(jī)號", validators=[ # DataRequired("請輸入用戶名"), Length(3, 20, message="長度不符"), ] ) passwd = PasswordField( label="密碼", validators=[ # DataRequired("請輸入密碼"), Length(3, 20), ], ) file = FileField( label="簡歷", validators=[ FileRequired(), FileAllowed(["pdf", "txt"], "pdf 能被接收") ] )
#templates/demo/login.htmlTitle
#主程序 import random from flask import Flask, redirect, render_template from forms import LoginForm from flask_bootstrap import Bootstrap app = Flask(__name__) bootstrap = Bootstrap(app) app.config["SECRET_KEY"] = random._urandom(24) @app.route("/success/") def success(): return "success" @app.route("/login/", methods=("GET", "POST")) def submit(): # 實(shí)例化表單對象; form = LoginForm() if form.validate_on_submit(): print(form.data) return redirect("/success/") return render_template("demo/login.html", form=form) app.run()
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44866.html
摘要:是一個(gè)編寫的微框架,讓我們可以使用語言快速實(shí)現(xiàn)一個(gè)網(wǎng)站或服務(wù)。使用當(dāng)你編寫一個(gè)函數(shù)時(shí),要想每個(gè)人都可以使用,需要用到來實(shí)現(xiàn)這個(gè)目標(biāo)。 flask flask是一個(gè)Python編寫的Web 微框架,讓我們可以使用Python語言快速實(shí)現(xiàn)一個(gè)網(wǎng)站或Web服務(wù)。 使用flask 當(dāng)你編寫一個(gè)函數(shù)時(shí),要想每個(gè)人都可以使用,需要用到flask來實(shí)現(xiàn)這個(gè)目標(biāo)。 導(dǎo)入falsk.Flask類 實(shí)...
摘要:并且只有數(shù)據(jù)庫中存在用戶可以登陸網(wǎng)頁。目前,對于用戶注冊,不返回?cái)?shù)據(jù)庫。用戶注冊時(shí),添加信息到數(shù)據(jù)庫中存放表單操作每個(gè)表單都由一個(gè)繼承自的類表示類表示的是屬性為的元素。當(dāng)注冊表單某一項(xiàng)不滿足程序定義的規(guī)則時(shí)當(dāng)注冊成功時(shí),返回 flask_bootstrap Bootstrap 是 Twitter 開發(fā)的一個(gè)開源框架,它提供的用戶界面組件可用于創(chuàng)建整潔且具有吸引力的網(wǎng)頁,而且這些網(wǎng)頁還能...
閱讀 3981·2021-11-22 15:31
閱讀 2518·2021-11-18 13:20
閱讀 3098·2021-11-15 11:37
閱讀 6956·2021-09-22 15:59
閱讀 735·2021-09-13 10:27
閱讀 3766·2021-09-09 09:33
閱讀 1434·2019-08-30 15:53
閱讀 2562·2019-08-29 15:37