@(學無止境)
python web開發(fā)中對大量參數的校驗(返回自定義錯誤提示)
安裝schema
pip install schema
校驗創(chuàng)建賬號的參數
- name: string 由7—15個字母捷沸、數字伊群、下劃線組成
- phone: string 11位手機號
- education: int 1:primary school; 2: junior high school; 3: High school; 4: bachelor; 5: master; 6: doctor
- age: int [7-150] 可選
- level: high脐供、middle治专、low
- grade: int 可選
校驗示例(可直接運行)
我的運行環(huán)境:
python: 3.7.1
schema: 0.6.8
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from schema import Regex, And, Use, Optional, Schema
def check_register_params(data):
""" 校驗創(chuàng)建新賬號的參數
name: string 由7—15個字母罐监、數字唐责、下劃線組成
phone: string 11位手機號
education: int 1:primary school; 2: junior high school; 3: High school;
4: bachelor; 5: master; 6: doctor
age: int [7-150] 可選
level: high、middle卑惜、low
grade: int 可選
"""
level_list = ["high", "middle", "low"]
mode_dict = {
"name": Regex("[a-zA-Z0-9_]{7,15}", error="name應為7-15位字母膏执、數字、下劃線組成"),
"phone": Regex("^(0|86|17951)?(13[0-9]|15[012356789]|18[0-9]|14[57]|17[678])[0-9]{8}$", error="手機號不正確"),
"education": And(int, lambda x: 0 < x < 7, error="education應該為0-6之間的整數"),
Optional("age", default="sing"): And(int, lambda x: 7 < x < 150, error="age應該為7-150之間的整數"),
"level": And(str, lambda x: x in level_list, error="level的可選值為high露久、middle更米、low"),
Optional("grade", default="90"): Use(int, error="應該為整數"),
}
try:
results = Schema(mode_dict).validate(data)
except Exception as ex:
print("Error: %s" % ex)
else:
print("結果是")
print(results)
if __name__ == '__main__':
# 驗證通過的參數
# data = {
# "name": "12345678",
# "phone": "18329269224",
# "education": 6,
# "age": 8,
# "level": "middle",
# "grade":86
# }
# check_register_params(data)
# name不合法
# data = {
# "name": "123",
# "phone": "18329269224",
# "education": 6,
# "age": 8,
# "level": "middle",
# "grade":86
# }
# check_register_params(data)
# 少了必填參數
data = {
"name": "hji123345",
"phone": "18329269224"
}
check_register_params(data)
依次放開main中注釋的內容,得到的輸出結果:
驗證通過的參數
name不合法
少了必填參數
參考資料:
https://blog.csdn.net/y472360651/article/details/81949653
https://shengxin.ren/article/211