6.Flask-WTForms

 Flask-WTF是簡化了WTForms操做的一個第三方庫。WTForms表單的兩個主要功能是驗證用戶提交數據的合法性以及渲染模板。還有其它一些功能:CSRF保護,html

文件上傳等。安裝方法:pip install flask-wtfpython

1.1.WTForms簡單驗證

from flask import Flask,request,render_template
from wtforms import Form,StringField
from wtforms.validators import Length,EqualTo

app = Flask(__name__)

class RegistForm(Form):
    username = StringField(validators=[Length(min=3,max=10,message='用戶名必須在3到10位之間')])
    password = StringField(validators=[Length(min=6,max=10,message='密碼必須6到10位之間')])
    password_repeat = StringField(validators=[Length(min=6,max=10),
                                              EqualTo("password",message='密碼不一致')])

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/regist/',methods=['GET','POST'])
def regist():
    if request.method == 'GET':
        return render_template('regist.html')
    else:
        form = RegistForm(request.form)
        if form.validate():
            return 'success'
        else:
            print(form.errors)
            return 'fail'

if __name__ == '__main__':
    app.run()

 

 1.2.WTForms經常使用驗證器和自定義驗證器

 經常使用的驗證器正則表達式

  • Email:驗證上傳的數據是否爲郵箱格式
  • EqualTo:兩個字段是否相等(密碼和重複密碼)
  • InputRequired:原始數據的須要驗證
  • Length:長度限制,有mix和max兩個值
  • NumberRange:數字的區間,有mix和max兩個值,若是在兩個值之間則知足
  • Regexp:自定義正則表達式
  • URL:必須url格式
  • UUID:uuid格式
from wtforms import Form,StringField,IntegerField
from wtforms.validators import Length,EqualTo,Email,InputRequired,NumberRange
from wtforms.validators import Regexp,URL,ValidationError


class LoginForm(Form):
    email = StringField(validators=[Email(message='郵箱格式不正確')])
    username = StringField(validators=[InputRequired(message='這個字段必需要填')])
    age = IntegerField(validators=[NumberRange(min=18,max=100)])
    phone = StringField(validators=[Regexp(r'1[38745]\d{9}')])
    homepage = StringField(validators=[URL()])
    captcha = StringField(validators=[Length(4,4)])

    # 自定義驗證器
    def validate_captcha(self,field):
        if field.data != '1234':      #field.data:用戶提交過來的數據
            raise ValidationError('驗證碼錯誤')          #若是驗證失敗,就拋出驗證失敗的異常

 

1.3.使用wtforms渲染模板

 forms.pydjango

class SettingsForm(Form):
    username = StringField(label="用戶名:",validators=[InputRequired(message='這個字段必需要填')])
    age = IntegerField('年齡:',validators=[NumberRange(min=18, max=100)])
    remeber = BooleanField('記住我')
    tags = SelectField('標籤',choices=[(1,'python'),(2,'django')])

flask_wtforms_demo.pyflask

@app.route('/settings/',methods=['GET','POST'])
def settings():
    if request.method == 'GET':
        form = SettingsForm()
        return render_template('settings.html',form=form)
    else:
        pass

settings.htmlapp

<form action="" method="post">
{#    括號裏面能夠添加樣式#}
    <p>{{ form.username.label }} {{ form.username(class="") }}</p>
    <p>{{ form.age.label }} {{ form.age() }}</p>
    <p>{{ form.remeber.label }} {{ form.remeber() }}</p>
    <p>{{ form.tags.label }} {{ form.tags() }}</p>
    <p><input type="submit" value="提交"></p>
</form>

相關文章
相關標籤/搜索