首頁 > 後端開發 > Python教學 > python中flask應用(表單處理)

python中flask應用(表單處理)

不言
發布: 2018-11-15 14:42:01
轉載
3454 人瀏覽過

這篇文章帶給大家的內容是關於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  驗證電子郵件地址的合法性,要求正則模式是^. @(

1

2 )$#  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] ://(?P3 )(?P:[0-9] )?(?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>


登入後複製
    {{ form.hidden_tag() }}     {{ form.name.label }} {{ form.name }}     {{ form.passwd.label }} {{ form.passwd }}     {{ form.file }}     
#主程序
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應用(表單處理)

以上是python中flask應用(表單處理)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板