#web-apps #web #web-framework #model-view-controller #mtv #web-dev-framework

arcanum

一个简单的库,用于创建具有Django启发式界面的Web应用程序

3个版本

0.1.2 2023年4月3日
0.1.1 2023年3月15日
0.1.0 2023年2月28日

#1192 in HTTP服务器

MIT许可证

21KB
380

Arcanum

该项目仍在开发中,因此尚未完成,并且会有所变化

这是一个我开始创建一个简单框架的个人项目。

待办事项列表

  • 基本功能(路由、文件)
  • 模板
  • 模型(数据库)
  • 文档

如何使用

要在cargo.toml文件中添加此库,请使用

[dependencies]
arcanum = "0.1"
serde = { version = "1.0", features = ["derive"] }

要实例化和运行基本Web服务器,请使用

let mut server = WebServer::new("127.0.0.1", 7878);
server.run();

其中“127.0.0.1”是服务器的地址,7878是端口号。

要添加一个简单路由,请使用

server.add_simple_route("/", handle_main_route);

其中 handle_main_route 是在main.rs文件中定义的一个函数

要定义handle_main_route所需的一切,例如

#[derive(Serialize)]
struct HomepageContext {
    title: String,
}

fn handle_main_route(_req: Request, _res: &mut Response) -> ReturnData {
    let context = HomepageContext {
        title: "Hello, world!".to_string(),
    };
    let template = Template::render_template("views/index.html", context);
    return ReturnData::Text(template);
}

HomepageContext由模板使用以确定要插入模板的内容,如果认为需要,可以向其中添加90个其他变量。 views/index.html 的内容如下

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Home page</title>
    </head>
    <body>
        <h1>{ title }, Title from rust content Object</h1>
    </body>
</html>

要添加带有参数的路由,例如id或类似的内容,我们会使用

server.add_route_with_params("/id/:id", handle_id_route);

在这种情况下,/id路由仍然匹配此路由,并且不会传递任何参数(仍在改进中)

在这种情况下,handle_id_route的处理方式如下


#[derive(Serialize)]
struct IdPageContext {
    id: String,
}

fn handle_id_route(
    _req: Request,
    _res: &mut Response,
    params: HashMap<String, String>,
) -> ReturnData {
    let context = IdPageContext {
        id: params["id"].clone(),
    };
    let template = Template::render_template("views/id.html", context);
    return ReturnData::Text(template);
}

我们再次使用模板

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
</head>
<body>
    <h1>{ id } This should be the id given by the path in the browser</h1>
</body>
</html>

这是id的模板。

辅助函数

serve_static_file 基于提供的路径提供静态文件,不能在add_simple_route函数中用作函数,因此您必须将其包装。有关更多信息,请参阅 examples/basic/main.rs

依赖项

~1.3–2.3MB
~49K SLoC