2个版本
0.2.2 | 2019年1月7日 |
---|---|
0.2.1 | 2019年1月7日 |
2084 in Web编程
21KB
261 行
Rust WebForms 库
此库支持验证和(将来)渲染HTML表单,以用于Askama或Tera模板。
目录
表单验证
要将表单验证添加到结构体,实现或使用ValidateForm特质。验证器属性可以应用于结构体或单个字段。
结构体属性
#[validate_regex(...)]
#[validate_regex(...)]
结构体属性接受一个键值对,键是一个标识符,可以在稍后与 #[validate_regex(...)]
字段属性一起使用,值是一个正则表达式。
验证器 | 类型 | 参数类型 | 描述 | 注意 |
---|---|---|---|---|
identifier | 标识符 | 正则表达式 | 创建一个标识符,它链接到提供的正则表达式 | 1, 2 |
注意
- 需要
lazy_static
和regex
crate 作为依赖项 - 标识符 是任何用户指定的字符串。这将被转换为一个可以与
#[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 |
注意
- 需要
lazy_static
和regex
crate 作为依赖项 - 可以是任何数值类型(整数/浮点数),但类型必须与被检查的字段匹配!
#[validate_match(...)]
#[validate_match(...)]
属性接受结构体中另一个字段的名称。它确保该字段与属性中指定的字段完全匹配。
参数 | 类型 | 参数类型 | 描述 | 注意 |
---|---|---|---|---|
字段 | 可变 | 结构体中的字段 | 检查此字段是否与另一个字段中指定的值匹配 | 1, 2 |
- 类型可变,但必须与属性中指明的字段完全匹配
- 类型必须实现
PartialEq
以进行比较
#[validate_regex(...)]
(字段)
#[validate_regex(...)
属性接受先前在结构体上应用 #[validate_regex(...)
的标识符。它允许在结构体中提前定义正则表达式并在整个结构体中多次使用,而不需要重新定义或编译。
参数 | 类型 | 参数类型 | 描述 | 注意 |
---|---|---|---|---|
regex | 字符串 | 变量名 | 检查此字段是否与结构体属性中声明的编译后正则表达式匹配 | 1 |
- 需要
lazy_static
和regex
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