鸿蒙 PC使用ohos-pip-autosign激活自动签名工具,安装第三方库validators实现Python数据校验库,内置大量常用格式校验规则
·
欢迎加入开源鸿蒙PC社区:https://harmonypc.csdn.net/
欢迎在PC社区平台申请新建项目:https://atomgit.com/OpenHarmonyPCDeveloper
AtomGit 仓库地址:https://atomgit.com/OpenHarmonyPCDeveloper/ohos_python_numpy
1. 环境搭建:
本文介绍在鸿蒙 PC+CodeArts IDE 搭建 Python 开发环境。借助鸿蒙专属包管理器 Harmonybrew 安装适配版 Python,搭配 ohos-pip-autosign 自动签名工具,解决系统对动态库的签名限制。通过虚拟环境隔离依赖,以 NumPy 完成安装与脚本测试,成功解决权限报错,搭建出可用的 Python 开发环境。
可以参考以下文章OpenHarmony 鸿蒙 PC + CodeArts IDE 实现 Python开发完整开发环境搭建指南
validators 库完整详解 + 全套实战 Demo
一、validators 是什么
validators 是 Python 轻量级数据校验库,内置大量常用格式校验规则,无需手写正则,一行代码验证邮箱、手机号、URL、IP、身份证、数字、UUID、银行卡、域名等。
核心优势
- 开箱即用,封装好正则逻辑,不用自己写复杂正则表达式
- 返回布尔值,判断简单;支持抛出异常模式
- 覆盖 Web 开发 90% 表单校验场景
- 无复杂依赖,体积小,配合 Flask/FastAPI/Django 表单校验非常方便
- 支持自定义校验扩展
主要作用
后端接收前端参数时做合法性校验:
- 邮箱、网址、IP、域名格式校验
- 手机号、身份证、银行卡、邮编身份类校验
- UUID、数字、区间、文件后缀、哈希值校验
- 批量校验表单字段,过滤非法请求参数
二、安装
pip install validators

三、基础使用规则
所有校验函数统一格式:
import validators
# 成功返回 True,失败返回 ValidationFailure 对象(布尔判断为False)
res = validators.email("test@qq.com")
if res:
print("格式合法")
else:
print("格式错误")
# 强制抛出异常(校验失败直接报错)
validators.email("xxx", throw=True)
完整分场景可运行 Demo
Demo1:网络类校验(邮箱、URL、IP、域名)
import validators
# 1. 邮箱校验
email_list = ["admin@163.com", "test@qq.com", "bad-email", "123@.com"]
for mail in email_list:
ok = validators.email(mail)
print(f"邮箱 {mail:<20} {'✅合法' if ok else '❌非法'}")
print("-" * 50)
# 2. URL 网址校验(支持 http/https)
url_list = [
"https://www.baidu.com",
"http://vuejs.org",
"ftp://xxx.com", # http/https以外默认不通过
"www.google.com"
]
for url in url_list:
ok = validators.url(url)
print(f"URL {url:<30} {'✅合法' if ok else '❌非法'}")
print("-" * 50)
# 3. IP地址(IPv4 / IPv6)
ip4_list = ["192.168.1.1", "256.0.0.1", "127.0.0.1"]
for ip in ip4_list:
ok = validators.ipv4(ip)
print(f"IPv4 {ip:<15} {'✅合法' if ok else '❌非法'}")
ip6 = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
print(f"IPv6 {ip6}: {'✅合法' if validators.ipv6(ip6) else '❌非法'}")
print("-" * 50)
# 4. 域名校验(不带http)
domain_list = ["baidu.com", "xxx.123", ".com"]
for d in domain_list:
ok = validators.domain(d)
print(f"域名 {d:<15} {'✅合法' if ok else '❌非法'}")

Demo2:身份&金融类(手机号、身份证、银行卡、邮编)
import validators
# 1. 中国大陆手机号
phone_list = ["13800138000", "19912345678", "1234567890", "138abc"]
for phone in phone_list:
ok = validators.mobile_phone(phone)
print(f"手机号 {phone:<15} {'✅合法' if ok else '❌非法'}")
print("-" * 50)
# 2. 身份证(18位)
id_cards = ["430123199912121234", "123456789", "43012319991212123x"]
for card in id_cards:
ok = validators.identity(card)
print(f"身份证 {card:<20} {'✅合法' if ok else '❌非法'}")
print("-" * 50)
# 3. 银行卡号
bank_cards = ["6222021234567890123", "12345", "622202abc"]
for card in bank_cards:
ok = validators.bank_card(card)
print(f"银行卡 {card:<20} {'✅合法' if ok else '❌非法'}")
print("-" * 50)
# 4. 邮政编码
zip_codes = ["410000", "12345", "1234567"]
for z in zip_codes:
ok = validators.zip_code(z)
print(f"邮编 {z:<10} {'✅合法' if ok else '❌非法'}")
Demo3:通用格式校验(UUID、数字、区间、哈希)
import validators
# 1. UUID v4 校验
uuid_str = "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"
fake_uuid = "1234-abc"
print(f"合法UUID: {validators.uuid(uuid_str)}")
print(f"非法UUID: {validators.uuid(fake_uuid)}")
print("-" * 50)
# 2. 纯数字校验(整数)
num_list = ["12345", "-99", "12.34", "abc123"]
for n in num_list:
ok = validators.int(n)
print(f"整数 {n:<10} {'✅合法' if ok else '❌非法'}")
# 浮点数
float_list = ["3.14", "-0.5", "abc"]
for f in float_list:
ok = validators.float(f)
print(f"浮点数 {f:<10} {'✅合法' if ok else '❌非法'}")
print("-" * 50)
# 3. 数值区间校验(0~100)
print("50 在0-100区间:", validators.between(50, min=0, max=100))
print("150 在0-100区间:", validators.between(150, min=0, max=100))
print("-" * 50)
# 4. MD5 / SHA256 哈希校验
md5_str = "e10adc3949ba59abbe56e057f20f883e"
sha256_str = "cf80cd8aed482d5d1527d7dc72fceff8493265928437d3f70b244ee0f05bfd3d"
print("MD5校验:", validators.md5(md5_str))
print("SHA256校验:", validators.sha256(sha256_str))
Demo4:表单批量校验工具(后端接口常用封装)
实际项目接收前端表单,统一批量校验,返回错误信息
import validators
def check_form(params: dict) -> tuple[bool, str]:
"""
批量校验表单
:param params: 前端参数字典
:return: (是否通过, 错误提示)
"""
# 校验邮箱
if not validators.email(params.get("email", "")):
return False, "邮箱格式不正确"
# 手机号
if not validators.mobile_phone(params.get("phone", "")):
return False, "手机号格式错误"
# 年龄 1~120
age = params.get("age")
if not validators.int(str(age)) or not validators.between(int(age), 1, 120):
return False, "年龄必须是1~120的整数"
# 网址(选填,不为空才校验)
site = params.get("site", "")
if site and not validators.url(site):
return False, "个人主页URL格式错误"
return True, "校验通过"
if __name__ == "__main__":
# 模拟前端正常表单
form1 = {
"email": "user@qq.com",
"phone": "13800138000",
"age": 25,
"site": "https://github.com"
}
ok, msg = check_form(form1)
print(f"表单1校验:{ok}, 提示:{msg}")
# 模拟非法表单
form2 = {
"email": "bad-email",
"phone": "123456",
"age": 200,
"site": "xxx"
}
ok2, msg2 = check_form(form2)
print(f"表单2校验:{ok2}, 提示:{msg2}")
Demo5:throw=True 抛出异常模式(FastAPI/Flask异常捕获)
适合框架全局异常捕获,校验失败直接抛出 ValidationFailure
import validators
from validators import ValidationFailure
try:
# 校验失败主动抛异常
validators.email("invalid-email", throw=True)
except ValidationFailure as e:
print("捕获校验异常:", e)
print("错误信息详情:", e.args)
四、常用内置校验函数清单
| 函数 | 作用 |
|---|---|
| validators.email(s) | 邮箱 |
| validators.url(s) | http/https网址 |
| validators.domain(s) | 域名 |
| validators.ipv4 / ipv6(s) | IP地址 |
| validators.mobile_phone(s) | 中国大陆手机号 |
| validators.identity(s) | 18位身份证 |
| validators.bank_card(s) | 银行卡 |
| validators.zip_code(s) | 6位邮编 |
| validators.uuid(s) | UUID |
| validators.int(s) / float(s) | 整数/浮点数 |
| validators.between(num, min, max) | 数字区间 |
| validators.md5 / sha1 / sha256(s) | 哈希值 |
| validators.slug(s) | 英文短链接标识 |
五、业务使用场景
- 后端接口参数校验
FastAPI/Flask/Django 接收前端表单,快速过滤非法参数,减少数据库无效查询 - 用户注册表单校验
邮箱、手机号、身份证、年龄统一校验 - 后台配置校验
校验后台填写的域名、IP、回调URL、银行卡 - 文件/哈希校验
校验文件MD5、接口传参UUID格式 - 数据清洗脚本
批量导入Excel数据时过滤无效手机号、邮箱
六、注意事项
- 校验空字符串:空字符串默认全部校验失败,选填字段需提前判断非空再校验
- 数字校验传入字符串:
validators.int()只接收字符串,数字要转str - 国内场景:手机号、身份证仅支持中国大陆规则,海外号码不兼容
- 区分
return False和throw=True:- 简单判断用默认返回布尔
- 框架全局异常捕获使用
throw=True
- 仅做格式校验,不做业务逻辑校验(如手机号是否已注册、邮箱是否存在,需要查库)
更多推荐



所有评论(0)