| 字段類型 | 說明 |
| --- | --- |
| StringField | 文本字段, 相當于type類型為text的input標簽 |
| TextAreaField | 多行文本字段 |
| PasswordField | 密碼文本字段 |
| HiddenField | 隱藏文本字段 |
| DateField | 文本字段, 值為datetime.date格式 |
| DateTimeField | 文本字段, 值為datetime.datetime格式 |
| IntegerField | 文本字段, 值為整數 |
| DecimalField | 文本字段, 值為decimal.Decimal |
| FloatField | 文本字段, 值為浮點數 |
| BooleanField | 復選框, 值為True 和 False |
| RadioField | 一組單選框 |
| SelectField | 下拉列表 |
| SelectMultipleField | 下拉列表, 可選擇多個值 |
| FileField | 文件上傳字段 |
| SubmitField | 表單提交按鈕 |
| FormFiled | 把表單作為字段嵌入另一個表單 |
| FieldList | 子組指定類型的字段 |
| 驗證函數 | 說明 |
| --- | --- |
| Email | 驗證是電子郵件地址 |
| EqualTo | 比較兩個字段的值; 常用于要求輸入兩次密鑰進行確認的情況 |
| IPAddress | 驗證IPv4網絡地址 |
| Length | 驗證輸入字符串的長度 |
| NumberRange | 驗證輸入的值在數字范圍內 |
| Optional | 無輸入值時跳過其它驗證函數 |
| DataRequired | 確保字段中有數據 |
| Regexp | 使用正則表達式驗證輸入值 |
| URL | 驗證url |
| AnyOf | 確保輸入值在可選值列表中 |
| NoneOf | 確保輸入值不在可選列表中 |
- 內聯驗證器
~~~
def my_length_check(form, field):
if len(field.data) > 50:
raise ValidationError('Field must be less than 50 characters')
class MyForm(Form):
name = StringField('Name', [InputRequired(), my_length_check])
~~~
- 通用且可重用的驗證函數
```
class UserForm(Form):
'''
用戶驗證字段
'''
account = StringField(validators=[DataRequired(message='用戶名不能為空'), length(min=5, max=32, message='用戶名長度在5-32位')])
secret = StringField()
type = IntegerField(validators=[DataRequired()])
def validate_type(self, value):
'''
通用且可重用的驗證函數 一般是以validate開頭,加上下劃線再加上對應的field字段(validate_filed),會自動識別對應字段所有的驗證器,然后執行驗證器進行判斷
:param value:
:return:
'''
try:
user = UserTypeEnum(int(value.data))
self.type.data = user
except ValueError as e:
raise e
class UserEmailForm(ClientForm):
account = StringField(validators=[
Email(message='invalidate email')
])
secret = StringField(validators=[
DataRequired(),
# password can only include letters , numbers and "_"
Regexp(r'^[A-Za-z0-9_*&$#@]{6,22}$')
])
nickname = StringField(validators=[DataRequired(),
length(min=2, max=22)])
def validate_account(self, value):
if User.query.filter_by(email=value.data).first():
raise ValidationError()
```
```
from flask import Blueprint, request
from app.libs.enums import UserTypeEnum
from app.validators.forms import UserForm
user = Blueprint('user', __name__)
@user.route('/get', methods=['GET'])
def get_user():
# 接收數據
data = request.json
# 驗證數據
form = UserForm(data=data)
if form.validate():
# 如果驗證通過,根據枚舉類型調用對應的方法
promise = {
UserTypeEnum.USER_EMAIL: __register_user_by_email
}
promise[form.type.data]()
else:
print(form.errors)
def __register_user_by_email():
pass
```
- 工欲善其事必先利其器
- 請求庫
- 解析庫
- 數據庫
- 存儲庫
- Web庫
- app爬取相關庫
- 爬蟲框架
- 部署相關庫
- ipython
- 基礎
- 數學函數
- 隨機函數
- 三角函數
- 字符串內建函數
- 列表方法
- 字典內置方法
- 正則表達式
- os
- 字符串及數字的判斷
- 常用魔術方法
- db
- mongodb
- mysql
- redis
- ORM
- ODM
- mongodb操作方法
- sqlite3
- access
- files
- Excel
- xml文件
- Python環境
- anaconda
- pip常用命令
- virtualenv
- pyenv
- cmder
- 遠程開發
- Jupyter
- crawler
- appium環境搭建
- adb工具
- uiautomator
- 運行Appium+Python Clinet + 夜神模擬器
- DesiredCapabilities參數大全
- requests
- scrapy
- gerapy
- scrapyd
- 請求頭fake_useragent庫
- 數據傳遞過程
- 數據清洗及入庫pipelines.py
- scrapy調用阿布云代理
- 圖片下載
- PyQt5
- pyinstaller
- 攻防
- xss
- xss反射
- Chrome模擬微信瀏覽器
- flask
- 注冊app
- 藍圖Blueprint
- 表單驗證wtforms
- Flask-SQLAlchemy
- 數據處理
- json
- tornado
- settings
- 工具
- fiddler
- ab壓力測試工具
- 高階
- 隊列
- 多線程
- 消息隊列
- 定時任務框架APScheduler
- Django
- 路由分離
- 模型
- admin
- Android
- apk逆向工程