# XSS 过滤 import validators from markupsafe import escape from validators import validator def str_escape(s): """ 对字符串进行 XSS 过滤,返回转义后的安全字符串。 :param s: 需要转义的字符串。 :return: 返回转义后的字符串,如果输入为空则返回 None。 """ if not s: return None return str(escape(s)) def between(*args, **kwargs): """ 验证数字是否介于最小值和最大值之间。 适用于整数、浮点数、小数和日期等类型。 :param value: 需要验证的数字。 :param min: 数字的最小值(可选)。 :param max: 数字的最大值(可选)。 :return: 如果验证成功返回 True,否则返回 ValidationFailure。 示例: >>> between(5, min=2) True >>> between(13.2, min=13, max=14) True >>> between(500, max=400) ValidationFailure(func=between, args=...) """ return validators.between(*args, **kwargs) def domain(*args, **kwargs): """ 验证给定值是否为有效的域名。 :param value: 需要验证的域名字符串。 :return: 如果验证成功返回 True,否则返回 ValidationFailure。 示例: >>> domain('example.com') True >>> domain('example.com/') ValidationFailure(func=domain, ...) """ return validators.domain(*args, **kwargs) def email(*args, **kwargs): """ 验证给定值是否为有效的电子邮件地址。 :param value: 需要验证的电子邮件地址。 :return: 如果验证成功返回 True,否则返回 ValidationFailure。 示例: >>> email('someone@example.com') True >>> email('bogus@@') ValidationFailure(func=email, ...) """ return validators.email(*args, **kwargs) def iban(*args, **kwargs): """ 验证给定值是否为有效的 IBAN 代码。 :param value: 需要验证的 IBAN 代码。 :return: 如果验证成功返回 True,否则返回 ValidationFailure。 示例: >>> iban('DE29100500001061045672') True >>> iban('123456') ValidationFailure(func=iban, ...) """ return validators.iban(*args, **kwargs) def ipv4(*args, **kwargs): """ 验证给定值是否为有效的 IPv4 地址。 :param value: 需要验证的 IPv4 地址。 :return: 如果验证成功返回 True,否则返回 ValidationFailure。 示例: >>> ipv4('123.0.0.7') True >>> ipv4('900.80.70.11') ValidationFailure(func=ipv4, args={'value': '900.80.70.11'}) """ return validators.ipv4(*args, **kwargs) def ipv6(*args, **kwargs): """ 验证给定值是否为有效的 IPv6 地址。 :param value: 需要验证的 IPv6 地址。 :return: 如果验证成功返回 True,否则返回 ValidationFailure。 示例: >>> ipv6('abcd:ef::42:1') True >>> ipv6('abc.0.0.1') ValidationFailure(func=ipv6, args={'value': 'abc.0.0.1'}) """ return validators.ipv6(*args, **kwargs) def length(*args, **kwargs): """ 验证给定字符串的长度是否在指定范围内。 :param value: 需要验证的字符串。 :param min: 字符串的最小长度(可选)。 :param max: 字符串的最大长度(可选)。 :return: 如果验证成功返回 True,否则返回 ValidationFailure。 示例: >>> length('something', min=2) True >>> length('something', min=9, max=9) True >>> length('something', max=5) ValidationFailure(func=length, ...) """ return validators.length(*args, **kwargs) def mac_address(*args, **kwargs): """ 验证给定值是否为有效的 MAC 地址。 :param value: 需要验证的 MAC 地址。 :return: 如果验证成功返回 True,否则返回 ValidationFailure。 示例: >>> mac_address('01:23:45:67:ab:CD') True >>> mac_address('00:00:00:00:00') ValidationFailure(func=mac_address, args={'value': '00:00:00:00:00'}) """ return validators.mac_address(*args, **kwargs) def slug(*args, **kwargs): """ 验证给定值是否为有效的 Slug 格式。 有效的 Slug 只能包含字母数字字符、连字符和下划线。 :param value: 需要验证的字符串。 :return: 如果验证成功返回 True,否则返回 ValidationFailure。 示例: >>> slug('my.slug') ValidationFailure(func=slug, args={'value': 'my.slug'}) >>> slug('my-slug-2134') True """ return validators.slug(*args, **kwargs) def url(*args, **kwargs): """ 验证给定值是否为有效的 URL。 :param value: 需要验证的 URL。 :param public: 是否仅允许公共 URL(可选)。 :return: 如果验证成功返回 True,否则返回 ValidationFailure。 示例: >>> url('http://foobar.dk') True >>> url('http://10.0.0.1') True >>> url('http://foobar.d') ValidationFailure(func=url, ...) >>> url('http://10.0.0.1', public=True) ValidationFailure(func=url, ...) """ return validators.url(*args, **kwargs) def uuid(*args, **kwargs): """ 验证给定值是否为有效的 UUID。 :param value: 需要验证的 UUID。 :return: 如果验证成功返回 True,否则返回 ValidationFailure。 示例: >>> uuid('2bc1c94f-0deb-43e9-92a1-4775189ec9f8') True >>> uuid('2bc1c94f 0deb-43e9-92a1-4775189ec9f8') ValidationFailure(func=uuid, ...) """ return validators.uuid(*args, **kwargs) @validator def even(value): """ 验证给定值是否为偶数。 :param value: 需要验证的数字。 :return: 如果是偶数返回 True,否则返回 ValidationFailure。 示例: >>> even(4) True >>> even(5) ValidationFailure(func=even, args={'value': 5}) """ return not (value % 2)