這篇文章帶給大家的內容是關於python中flask應用(表單處理),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
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 字段.date一樣
IntergerField 文字字段,格式要求是整數
DecimalField #數
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 用正則表達式必填欄位
Regexp 用正則表達式驗證值
### Regexp 用正則表達式驗證值, ### 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.html nbsp;html> <meta> <title>Title</title>
#主程序 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()
以上是python中flask應用(表單處理)的詳細內容。更多資訊請關注PHP中文網其他相關文章!