🚀 第 36 天:在 Rust 中製作動態網頁內容,以模板製作動態網頁內容!

https://dev.to/aniket_botre/day-36-rocketing-ahead-with-templating-crafting-dynamic-web-content-in-rust-2j76

第 36 天:使用模板使火箭突飛猛進 – 在 Rust 中製作動態網頁內容!

您好,網頁開發宇宙的太空學員們!在我們通過 Rocket 框架的星際旅程的第 36 天,我偶然發現了模板的繁星般的手藝。現在,請坐下,放鬆,看我們如何用 Rocket 編織動態網頁的故事。

🌟 模板的基礎:編織網頁的壁毯 🌟

首先!模板就像是一個網頁巫師,將動態內容嵌入您的靜態 HTML 頁面中。這是將數據變數插入佔位符的古老藝術,允許一個 HTML 文件基於不同的上下文顯示不同的內容 – 真正神奇的體驗! 🧙‍♂️✨

🚀📜 Rocket 模板:動態網頁開發的魔法書 📜🚀

Rocket 作為其複雜的框架,配備了一個模板引擎,將您的 Rust 結構轉換為 HTML 粉塵。

我們可以使用 tera crate。例如,我們可以在項目中創建一個 templates 目錄並將 HTML 文件放入其中。然後我們可以使用 tera 來呈現這些 HTML 文件。但是 html 文件應該有.tera 擴展名。例如,如果我們有 index.html 文件,我們應該將其重命名為 index.html.tera。然後我們可以使用 tera 來呈現這個文件。

以下是我們今天製作的代碼的分解:

🧬 數據結構:用戶 🧬

#[derive(Serialize)]
struct User {
first_name: String,
last_name: String,
}

在這裡我們定義了一個 User 結構。可以把它想象成我們的網頁將展示的數據的藍圖。 #[derive(Serialize)] 就像對 Rust 低語說:“嘿,確保你在需要時能把這個變成一個類似 JSON 的格式。”

🎩 JSON 法術:hello 路由 🎩

#[get(“/hello”)]
fn hello() -> RawJson<&'static str> {
RawJson(
r#”
{
“status”: “成功”,
“message”: “你好,API”,
}
“#,
)
}

hello 函數是我們發出一個簡單法術以返回 JSON 響應的地方。 RawJson 將我們的靜態字符串包裹在神秘的 JSON 長袍中,準備在 API 調用時召喚出來。就像把一個心靈傳達瓶中的心靈訊息送入互聯網虛空中。

📜 404 卷軸:not_found 捕捉器 📜

#[catch(404)]
fn not_found(req: &Request) -> String {
format!(
“哦不🥲!我們找不到所請求的路徑 ‘{}'”,
req.uri()
)
}

這個卷軸,嘿,這個函數,在我們的應用程序中的某個地方發揮作用。當有人冒險進入我們應用程序的未知領域時,我們會溫柔地用個人化的消息把他們推回來。 “不是所有漫遊者都迷失了,在我們中,你,我的朋友,絕對是迷路了。”

🎨 傑作:home_page 路由 🎨

#[get(“/”)]
fn home_page() -> Template {
let context = User {
first_name: “Aniket”.to_string(),
last_name: “Botre”.to_string(),
};
Template::render(“index”, &context)
}

home_page 函數是我們的 HTML 和數據的壁毯變得生動的地方。我們創建了 User 的一個實例並將其傳遞給我們名為 index 的模板。就像在講故事,每個訪客都會隨著它們的到來讓角色變得鮮活。

🚀 發射台:rocket 功能 🚀

#[launch]
fn rocket() -> _ {
rocket::build()
.mount(“/”, routes![home_page, hello])
.register(“/”, catchers![not_found])
.attach(Template::fairing())
}

這是我們組裝我們的太空飛船的地方。我們安裝了我們的路線和捕手以及模板挂件,這是 Rocket 準備模板引擎升空的方式!

🖼️ 帆布:templates/index.html.tera 🖼️


Rocket 框架