#forms #html #validation #user-input #client-server

es-htmlform

用于构建和验证 HTML(5) 表单的库

2 个版本

0.1.1 2019年11月1日
0.1.0 2019年11月1日

#6 in #form

Apache-2.0/MIT

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/minmaxlength/minlengthpattern)。

  • 允许对每个字段进行自定义服务器端验证。

  • 通过实现 SerdeSerialize 特性来序列化为 JSON(和其他格式)。

  • 通过实现 SerdeDeserialize 特性,可以从 JSON 和其他格式(例如使用 Actix 的 Form 提取器编写的 urlencoded)进行反序列化。

不直接提供 HTML 生成功能,因为用户通常会希望自定义 HTML 表单的渲染。相反,HtmlForm 实现了 SerdeSerialize 特性,因此它可以轻松转换为 JSON 以进行客户端渲染,或用作模板语言(如 handlebars)的数据结构。

请注意,这个库处于非常初级的阶段,我计划在不久的将来添加一些功能(更多的测试、客户端和服务器端表单的渲染示例、一些 i18n 库的错误消息集成、Actix、hyper 等的集成代码)等等,肯定还有更多...

还请注意,我对 Rust 相对较新,我非常欢迎改进建议!

对于建议、问题、评论或其他内容,请随时通过电子邮件发送给我: [email protected]

依赖项

~2.6–4MB
~74K SLoC