簡介
WTForms是一個支持多個web框架的form組件,主要用於對用戶請求數據進行驗證。html
安裝:html5
pip3 install wtforms
用戶登陸註冊示例
1. 用戶登陸python
當用戶登陸時候,須要對用戶提交的用戶名和密碼進行多種格式校驗。如:web
用戶不能爲空;用戶長度必須大於6;
密碼不能爲空;密碼長度必須大於12;密碼必須包含 字母、數字、特殊字符等(自定義正則);
flask
#!/usr/bin/env python # -*- coding:utf-8 -*-
# app.py
from flask import Flask, render_template, request, redirect from wtforms import Form from wtforms.fields import core from wtforms.fields import html5 from wtforms.fields import simple from wtforms import validators from wtforms import widgets app = Flask(__name__, template_folder='templates') app.debug = True class LoginForm(Form): # 先寫一個類 name = simple.StringField( # 字段 label='用戶名', # 顯示漢語名字 validators=[ validators.DataRequired(message='用戶名不能爲空.'), # 錯誤信息 validators.Length(min=6, max=18, message='用戶名長度必須大於%(min)d且小於%(max)d') # 錯誤信息 ], widget=widgets.TextInput(), # 要生效了,生成標籤 render_kw={'class': 'form-control'} # 加上樣式 ) pwd = simple.PasswordField( # 字段 label='密碼', # 顯示漢語名字 validators=[ validators.DataRequired(message='密碼不能爲空.'), # 錯誤信息 validators.Length(min=8, message='用戶名長度必須大於%(min)d'), # 錯誤信息 validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}", message='密碼至少8個字符,至少1個大寫字母,1個小寫字母,1個數字和1個特殊字符') # 錯誤信息 ], widget=widgets.PasswordInput(), # 要生效了,生成標籤 render_kw={'class': 'form-control'} # 加上樣式 ) @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'GET': form = LoginForm() # 先實例化一下,沒有傳參數,是幫我們生成HTML標籤的 return render_template('login.html', form=form) # 帶上form信息 else: form = LoginForm(formdata=request.form) # post請求,先取數據 if form.validate(): # 替咱們作校驗,校驗經過 print('用戶提交數據經過格式驗證,提交的值爲:', form.data) else: # 校驗沒經過 print(form.errors) # 錯誤信息 return render_template('login.html', form=form) if __name__ == '__main__': app.run()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body>
<!-- login.html --> <h1>登陸</h1> <form method="post"> <!--<input type="text" name="name"> form.name.label幫咱們生成名字,form.name生成輸入框,form.name.errors[0] 顯示錯誤信息--> <p>{{form.name.label}} {{form.name}} {{form.name.errors[0] }}</p> <!--<input type="password" name="pwd" form.pwd.label幫咱們生成名字,form.pwd生成輸入框,form.pwd.errors[0]顯示錯誤信息>--> <p>{{form.pwd.label}} {{form.pwd}} {{form.pwd.errors[0] }}</p> <input type="submit" value="提交"> </form> </body> </html>
2. 用戶註冊緩存
註冊頁面須要讓用戶輸入:用戶名、密碼、密碼重複、性別、愛好等。session