2 个版本
0.1.1 | 2019年11月1日 |
---|---|
0.1.0 | 2019年11月1日 |
#6 in #form
72KB
1.5K SLoC
es-htmlform
es-htmlform 是一个 Rust 库,用于构建、验证和渲染 HTML(5) 表单。它旨在尽可能遵循 HTML 规范,并提供一个完整的解决方案,以便轻松构建正确的表单并在客户端和服务器端验证数据。
示例
use es_htmlform::HtmlForm;
use es_htmlform::value::ValueMap;
use es_htmlform::types::{Method, InputType, Constraint, Attr};
fn main() {
let mut form = HtmlForm::new(".", Method::Get)
.input(
InputType::Text, "q", "Search", true,
vec![Constraint::MinLength(2)],
vec![Attr::Placeholder("enter value"), Attr::Autofocus]
).unwrap()
.submit(None, "go!", vec![]).unwrap();
let values = ValueMap::from_urlencoded(b"q=foo").unwrap();
form.update(&values, true);
assert_eq!(form.errors.len(), 0);
assert_eq!(form.get_string("q").unwrap(), "foo");
println!("{}", serde_json::to_string_pretty(&form));
}
功能
-
遵循构建器样式模式来构建正确的表单结构。
-
提供了一套完整的枚举,用于所有 HTML 元素和属性,包括在构建表单时进行 HTML 有效性检查和值验证。
-
提供基于 HTML 约束属性的客户端和服务器端验证(例如
max
/min
,maxlength
/minlength
,pattern
)。 -
允许对每个字段进行自定义服务器端验证。
-
通过实现 Serde 的
Serialize
特性来序列化为 JSON(和其他格式)。 -
通过实现 Serde 的
Deserialize
特性,可以从 JSON 和其他格式(例如使用 Actix 的Form
提取器编写的 urlencoded)进行反序列化。
不直接提供 HTML 生成功能,因为用户通常会希望自定义 HTML 表单的渲染。相反,HtmlForm
实现了 Serde 的 Serialize
特性,因此它可以轻松转换为 JSON 以进行客户端渲染,或用作模板语言(如 handlebars)的数据结构。
请注意,这个库处于非常初级的阶段,我计划在不久的将来添加一些功能(更多的测试、客户端和服务器端表单的渲染示例、一些 i18n 库的错误消息集成、Actix、hyper 等的集成代码)等等,肯定还有更多...
还请注意,我对 Rust 相对较新,我非常欢迎改进建议!
对于建议、问题、评论或其他内容,请随时通过电子邮件发送给我: [email protected]。
依赖项
~2.6–4MB
~74K SLoC