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