ITPub博客

首页 > 应用开发 > Python > 使用Validation框架进行输入校验

使用Validation框架进行输入校验

原创 Python 作者:mingtian66 时间:2024-09-27 16:46:41 0 删除 编辑

在Python中进行输入校验时,使用Validation框架(如Pydantic、Cerberus、Marshmallow等)可以提高代码的可维护性和健壮性。以下是几个常见的Validation框架及其使用方法:
1. Pydantic

Pydantic是一个非常流行的校验和数据解析库,特别适用于FastAPI等现代Web框架。它基于Python的类型注解,简单易用且高效。
优点

    支持类型提示和自动类型转换。
    强大的错误信息报告,帮助快速定位问题。
    高效的性能,基于Cython实现。

安装

bash

pip install pydantic

示例用法

python

from pydantic import BaseModel, ValidationError, Field
from typing import List, Optional

# 定义数据模型
class UserModel(BaseModel):
    name: str
    age: int = Field(..., ge=18, description="Age must be greater than or equal to 18")  # ge表示最小值
    email: Optional[str] = None
    friends: List[str] = []  # 列表类型

# 校验数据
try:
    user = UserModel(name="John Doe", age=30, email="john@example.com")
    print(user.dict())  # 输出字典格式
except ValidationError as e:
    print(e.json())  # 输出详细的错误信息

2. Cerberus

Cerberus是一个轻量级的数据校验库,灵活且可扩展,适用于复杂的校验规则。
优点

    支持自定义校验规则。
    校验规则定义灵活且易于理解。
    适合较为复杂的输入结构。

安装

bash

pip install cerberus

示例用法

python

from cerberus import Validator

# 定义校验规则
schema = {
    'name': {'type': 'string', 'maxlength': 50, 'required': True},
    'age': {'type': 'integer', 'min': 18, 'required': True},
    'email': {'type': 'string', 'regex': r'\S+@\S+\.\S+', 'required': False}
}

# 创建校验器
v = Validator(schema)

# 校验数据
document = {'name': 'John Doe', 'age': 30, 'email': 'john@example.com'}
if v.validate(document):
    print("Validation successful:", v.document)
else:
    print("Validation errors:", v.errors)

3. Marshmallow

Marshmallow是另一个强大的序列化/反序列化和校验框架,特别适用于将复杂对象转换为原生Python数据类型。
优点

    既支持校验又支持序列化/反序列化。
    灵活的字段和校验规则定义。
    可与ORM(如SQLAlchemy)集成。

安装

bash

pip install marshmallow

示例用法

python

from marshmallow import Schema, fields, validates, ValidationError

# 定义Schema
class UserSchema(Schema):
    name = fields.Str(required=True)
    age = fields.Int(required=True, validate=lambda n: n >= 18)
    email = fields.Email()

    # 自定义校验函数
    @validates('name')
    def validate_name(self, value):
        if len(value) < 3:
            raise ValidationError('Name must be at least 3 characters long.')

# 创建Schema实例
schema = UserSchema()

# 校验数据
try:
    user = schema.load({"name": "John", "age": 20, "email": "john@example.com"})
    print(user)
except ValidationError as err:
    print("Validation errors:", err.messages)

选择合适的Validation框架

    Pydantic:适合需要快速校验、解析、和转换数据的场景,特别是在API开发中。
    Cerberus:适合灵活定义复杂校验规则,且不需要其他复杂功能时。
    Marshmallow:适用于需要与数据库对象打交道的项目,特别是需要序列化/反序列化功能。

根据需求选择合适的Validation框架,可以大大提升输入校验的效率和代码的可维护性。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040412/viewspace-3033667/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-07

  • 博文量
    589
  • 访问量
    602912