Anansi:一个简单的 MVC Web 框架

22-09-20 banq

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>,
}



详细点击标题