2个版本

0.2.2 2019年1月7日
0.2.1 2019年1月7日

2084 in Web编程

MIT 许可证

21KB
261

Rust WebForms 库

此库支持验证和(将来)渲染HTML表单,以用于Askama或Tera模板。

目录

表单验证

要将表单验证添加到结构体,实现或使用ValidateForm特质。验证器属性可以应用于结构体或单个字段。

结构体属性

#[validate_regex(...)]

#[validate_regex(...)] 结构体属性接受一个键值对,键是一个标识符,可以在稍后与 #[validate_regex(...)] 字段属性一起使用,值是一个正则表达式。

验证器 类型 参数类型 描述 注意
identifier 标识符 正则表达式 创建一个标识符,它链接到提供的正则表达式 1, 2

注意

  1. 需要 lazy_staticregex crate 作为依赖项
  2. 标识符 是任何用户指定的字符串。这将被转换为一个可以与 #[validate(compiled_regex = "...")] 字段属性一起使用的标识符

结构体属性示例

以下示例编译了一个正则表达式名称 pw_regex,并允许它在表单中多次使用,而只需编译一次。

use webforms::validate::ValidateForm;

#[derive(ValidateForm)]
#[validate_regex(pw_regex = r"^a_regex_string$")]
struct RegisterForm {
    ...
    #[validate_regex(pw_regex)]
    pub password1: String,

    #[validate_regex(pw_regex)]
    pub password2: String,
    ...
}

字段属性

#[validate(...)]

#[validate(...)] 属性接受预定义验证器(例如,email)或键值对(例如,min_length),其中键代表要验证的内容,值代表验证标准。请参阅下表,了解所有已实现的验证器。

验证器 类型 参数类型 描述 注意
email 字符串 检查输入是否为有效的电子邮件地址 1
phone 字符串 检查输入是否为有效的 美国 电话号码 1
min_length 字符串 整数 检查输入字符长度是否大于提供的值
max_length 字符串 整数 检查输入字符长度是否小于提供的值
min_value 数值 数值 检查输入是否大于提供的值 2
max_value 数值 数值 检查输入是否小于提供的值 2
regex 字符串 正则表达式 检查输入是否匹配提供的正则表达式 1

注意

  1. 需要 lazy_staticregex crate 作为依赖项
  2. 可以是任何数值类型(整数/浮点数),但类型必须与被检查的字段匹配!

#[validate_match(...)]

#[validate_match(...)] 属性接受结构体中另一个字段的名称。它确保该字段与属性中指定的字段完全匹配。

参数 类型 参数类型 描述 注意
字段 可变 结构体中的字段 检查此字段是否与另一个字段中指定的值匹配 1, 2
  1. 类型可变,但必须与属性中指明的字段完全匹配
  2. 类型必须实现 PartialEq 以进行比较

#[validate_regex(...)] (字段)

#[validate_regex(...) 属性接受先前在结构体上应用 #[validate_regex(...) 的标识符。它允许在结构体中提前定义正则表达式并在整个结构体中多次使用,而不需要重新定义或编译。

参数 类型 参数类型 描述 注意
regex 字符串 变量名 检查此字段是否与结构体属性中声明的编译后正则表达式匹配 1
  1. 需要 lazy_staticregex crate 作为依赖项

字段属性示例

use webforms::validate::ValidateForm;

#[derive(ValidateForm)]
struct UpdateProfileForm {
    #[validate(email)]
    pub email: String,

    #[validate(regex = r"^some_password_regex$")]
    pub password: String,

    #[validate_match(password)]
    pub password2: String,

    #[validate(phone)]
    pub phone: String,

    #[validate(min_value = 18)]
    pub age: u8;
}

使用生成的代码

这将自动实现 ValidateForm 特性,允许像这样调用 validate() 方法

pub fn main() {
    let form = RegisterForm {
        ...
    };

    match form.validate() {
        Ok(_) => println!("success!"),
        Err(errs) => {
            for err in errs {
                println!("{:?}", err);
            }
        }
    }
}

validate() 在验证成功时返回 Ok(()),或在失败时返回包含 ValidationError 类型向量的错误,每个类型描述一个验证失败的字段。

HTML生成

待办事项:目标是实现一个方法(可能是 render()),该方法可以从模板库中调用以将表单渲染为 HTML

信息

许可:MIT

作者:Kevin Allison

依赖项

~2.5MB
~56K SLoC