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 在 网络编程
每月641次下载
24KB
305 行
axum-messages
🛎️ Axum的一次性通知消息。
🎨 概述
此crate为axum
应用程序提供一次性通知消息或闪存消息。
它构建在tower-sessions
之上,因此已经使用tower-sessions
的应用程序可以以最小设置使用此crate。
有关使用axum-extra
cookie的实现,请参阅axum-flash
;axum-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