Anansi:一个简单的 MVC Web 框架


Anansi 是一个用于 Rust 的简单 MVC Web 框架。
1、安全第一
除了用 Rust 编写之外,Anansi 还为常见的 Web 安全漏洞提供了防御。

2、高效
Anansi 还允许 Web 应用程序以 Rust 的速度异步运行。

3、 容易上手
Anansi 处理 Web 开发的许多重复部分,让您可以更快地处理应用程序的重要部分。

模型
通过Rust而不是SQL操作数据库:

// A topic in a forum.
#[model]
#[derive(ToUrl)]
pub struct Topic {
    pub title: VarChar<200>,
    pub date: DateTime,
}

// A comment in a topic.
#[model]
pub struct Comment {
    pub topic: ForeignKey<Topic>,
    pub user: ForeignKey<auth::models::User>,
    pub content: VarChar<40000>,
    pub created: DateTime,
}

视图

#[viewer]
impl<R: Request> TopicView<R> {
    // A view of the last 25 topics.
    #[view(if_guest)]
    async fn index(req: R) -> Result<Response> {
        let title =
"Latest Topics";
        let topics = Topic::order_by(date().desc())
            .limit(25).query(&req).await?;
    }
}

将请求映射到视图很简单:

routes! {
    path("", TopicView::index),
    path(
"new", TopicView::new),
    path(
"{topic_id}", TopicView::show),
}

模板

模板能混合Rust 与 HTML 实现格式化。

@extend "base"

@block title {@title}

@block content {
    <h1>@title</h1>
    <ul>
        @for topic in topics {
            <li>@link req, Self::show, topic {@topic.title}</li>
        }
    </ul>
    @if req.user().is_auth() {
        @link req, Self::new {New Topic}
    }
}

Form表单
可以毫不费力地创建表单。

#[form(Topic)]
pub struct TopicForm {
    pub title: VarChar<200>,
    pub content: VarChar<40000>,
}


详细点击标题