当前位置: 首页 > ds >正文

Rust 学习笔记1

Basic基础

actix_web基础 

#[get("/favicon")]

        获取静态图片

#[get("/welcome")] 

        简单的欢迎

#`/user/{name}/`

basic.rs源码 

源码

use std::{convert::Infallible, io};use actix_files::{Files, NamedFile};
use actix_session::{storage::CookieSessionStore, Session, SessionMiddleware};
use actix_web::{error, get,http::{header::{self, ContentType},Method, StatusCode,},middleware, web, App, Either, HttpRequest, HttpResponse, HttpServer, Responder, Result,
};
use async_stream::stream;// NOTE: Not a suitable session key for production.
static SESSION_SIGNING_KEY: &[u8] = &[0; 64];/// favicon handler
#[get("/favicon")]
async fn favicon() -> Result<impl Responder> {Ok(NamedFile::open("static/favicon.ico")?)
}/// simple index handler
#[get("/welcome")]
async fn welcome(req: HttpRequest, session: Session) -> Result<HttpResponse> {println!("{req:?}");// sessionlet mut counter = 1;if let Some(count) = session.get::<i32>("counter")? {println!("SESSION value: {count}");counter = count + 1;}// set counter to sessionsession.insert("counter", counter)?;// responseOk(HttpResponse::build(StatusCode::OK).content_type(ContentType::plaintext()).body(include_str!("../static/welcome.html")))
}async fn default_handler(req_method: Method) -> Result<impl Responder> {match req_method {Method::GET => {let file = NamedFile::open("static/404.html")?.customize().with_status(StatusCode::NOT_FOUND);Ok(Either::Left(file))}_ => Ok(Either::Right(HttpResponse::MethodNotAllowed().finish())),}
}/// response body
async fn response_body(path: web::Path<String>) -> HttpResponse {let name = path.into_inner();HttpResponse::Ok().content_type(ContentType::plaintext()).streaming(stream! {yield Ok::<_, Infallible>(web::Bytes::from("Hello "));yield Ok::<_, Infallible>(web::Bytes::from(name));yield Ok::<_, Infallible>(web::Bytes::from("!"));})
}/// handler with path parameters like `/user/{name}/`
async fn with_param(req: HttpRequest, path: web::Path<(String,)>) -> HttpResponse {println!("{req:?}");HttpResponse::Ok().content_type(ContentType::plaintext()).body(format!("Hello {}!", path.0))
}#[actix_web::main]
async fn main() -> io::Result<()> {env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));// random key means that restarting server will invalidate existing session cookieslet key = actix_web::cookie::Key::from(SESSION_SIGNING_KEY);log::info!("starting HTTP server at http://localhost:8080");HttpServer::new(move || {App::new()// enable automatic response compression - usually register this first.wrap(middleware::Compress::default())// cookie session middleware.wrap(SessionMiddleware::builder(CookieSessionStore::default(), key.clone()).cookie_secure(false).build(),)// enable logger - always register Actix Web Logger middleware last.wrap(middleware::Logger::default())// register favicon.service(favicon)// register simple route, handle all methods.service(welcome)// with path parameters.service(web::resource("/user/{name}").route(web::get().to(with_param)))// async response body.service(web::resource("/async-body/{name}").route(web::get().
http://www.xdnf.cn/news/14087.html

相关文章:

  • 数字孪生系统汽车工厂生产异常监控的智能利器
  • 快速解决软件测试的逻辑方法运用
  • 数字孪生之KTV洗脚城白皮书:娱乐产业的虚实融合革命
  • LX-YST-1
  • Qt背景平铺
  • Java-45 深入浅出 Tomcat 核心架构与处理流程全解析Coyote IO模型与协议
  • java集合(十) ---- LinkedList 类
  • 基于CT图像的硬参数共享多任务分析:肝脏肿瘤分割与良恶性分类
  • ELK 日志分析系统
  • transformer demo
  • 深入剖析Redis Cluster集群,Redis持久化机制,Redis数据类型及其数据结构
  • DeepSeek与呼叫中心系统结合提升效率
  • ELK日志文件分析系统——1
  • 美化显示MSVC调试的数据结构
  • 当雷达学会“读心术” 汽车舱内安全迈入新纪元
  • C盘瘦身?
  • 如何将视频从 iPhone 传输到 HP 笔记本电脑
  • Untiy打包安卓踩坑
  • 单点登录(SSO)技术原理与实现指南
  • 【Docker基础】Docker核心概念:命名空间(Namespace)详解
  • C++11 Generalized(non-trivial) Unions:从入门到精通
  • LINUX613计划测put
  • Hadoop 003 — JAVA操作MapReduce入门案例
  • 传统数据仓库正在被 Agentic AI 吞噬?Agentic Data Stack 初探
  • 代码训练LeetCode(33)字符串首次匹配
  • 基于Cesium的Shadertoy纹理材质应用
  • 如何从 Windows 11 或 10 远程访问 Ubuntu 24.04 或 22.04 桌面
  • Java过滤器的基本概念
  • 微软Copilot两大创新功能详解:SharePoint Agents vs. Copilot Notebooks
  • Git更新master分支完整指南:从拉取到推送的全流程