欢迎加入开源鸿蒙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、银行卡、域名等。

核心优势
  1. 开箱即用,封装好正则逻辑,不用自己写复杂正则表达式
  2. 返回布尔值,判断简单;支持抛出异常模式
  3. 覆盖 Web 开发 90% 表单校验场景
  4. 无复杂依赖,体积小,配合 Flask/FastAPI/Django 表单校验非常方便
  5. 支持自定义校验扩展
主要作用

后端接收前端参数时做合法性校验:

  • 邮箱、网址、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) 英文短链接标识
五、业务使用场景
  1. 后端接口参数校验
    FastAPI/Flask/Django 接收前端表单,快速过滤非法参数,减少数据库无效查询
  2. 用户注册表单校验
    邮箱、手机号、身份证、年龄统一校验
  3. 后台配置校验
    校验后台填写的域名、IP、回调URL、银行卡
  4. 文件/哈希校验
    校验文件MD5、接口传参UUID格式
  5. 数据清洗脚本
    批量导入Excel数据时过滤无效手机号、邮箱
六、注意事项
  1. 校验空字符串:空字符串默认全部校验失败,选填字段需提前判断非空再校验
  2. 数字校验传入字符串:validators.int() 只接收字符串,数字要转str
  3. 国内场景:手机号、身份证仅支持中国大陆规则,海外号码不兼容
  4. 区分 return Falsethrow=True
    • 简单判断用默认返回布尔
    • 框架全局异常捕获使用 throw=True
  5. 仅做格式校验,不做业务逻辑校验(如手机号是否已注册、邮箱是否存在,需要查库)
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐