9个版本 (5个重大更新)

0.6.1 2024年4月15日
0.6.0 2024年3月20日
0.5.0 2024年3月9日
0.4.0 2024年3月5日
0.1.0 2024年1月17日

#766网络编程

Download history 88/week @ 2024-04-30 123/week @ 2024-05-07 138/week @ 2024-05-14 221/week @ 2024-05-21 263/week @ 2024-05-28 158/week @ 2024-06-04 223/week @ 2024-06-11 128/week @ 2024-06-18 180/week @ 2024-06-25 160/week @ 2024-07-02 121/week @ 2024-07-09 139/week @ 2024-07-16 136/week @ 2024-07-23 161/week @ 2024-07-30 196/week @ 2024-08-06 132/week @ 2024-08-13

每月641次下载

MIT许可证

24KB
305

axum-messages

🛎️ Axum的一次性通知消息。

🎨 概述

此crate为axum应用程序提供一次性通知消息或闪存消息。

它构建在tower-sessions之上,因此已经使用tower-sessions的应用程序可以以最小设置使用此crate。

有关使用axum-extra cookie的实现,请参阅axum-flashaxum-messages从该crate借用,但通过利用tower-sessions简化了API。

此crate的实现灵感来自Django消息框架

📦 安装

要在项目中使用此crate,请将以下内容添加到您的Cargo.toml文件中

[dependencies]
axum-messages = "0.6.1"

🤸 使用

示例

use std::net::SocketAddr;

use axum::{
    response::{IntoResponse, Redirect},
    routing::get,
    Router,
};
use axum_messages::{Messages, MessagesManagerLayer};
use tower_sessions::{MemoryStore, SessionManagerLayer};

async fn set_messages_handler(messages: Messages) -> impl IntoResponse {
    messages
        .info("Hello, world!")
        .debug("This is a debug message.");

    Redirect::to("/read-messages")
}

async fn read_messages_handler(messages: Messages) -> impl IntoResponse {
    let messages = messages
        .into_iter()
        .map(|message| format!("{}: {}", message.level, message))
        .collect::<Vec<_>>()
        .join(", ");

    if messages.is_empty() {
        "No messages yet!".to_string()
    } else {
        messages
    }
}

#[tokio::main]
async fn main() {
    let session_store = MemoryStore::default();
    let session_layer = SessionManagerLayer::new(session_store).with_secure(false);

    let app = Router::new()
        .route("/", get(set_messages_handler))
        .route("/read-messages", get(read_messages_handler))
        .layer(MessagesManagerLayer)
        .layer(session_layer);

    let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
    let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
    axum::serve(listener, app.into_make_service())
        .await
        .unwrap();
}

您可以在示例目录中找到此示例

🦺 安全性

此crate使用#![forbid(unsafe_code)]来确保所有内容都以100%安全的方式实现Rust。

🛟 获取帮助

我们提供了一些示例以帮助您开始。您也可以打开讨论并提出您可能有的其他问题。

👯 贡献

我们感谢所有类型的贡献,谢谢!

依赖关系

~6–14MB
~158K SLoC