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