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

3.Rust + Axum 提取器模式深度剖析

摘要

深入解读 Rust + Axum 提取器模式,涵盖内置提取器及自定义实现。

一、引言

在 Rust 的 Web 开发领域,Axum 作为一款轻量级且高效的 Web 框架,为开发者提供了强大的功能。其中,提取器(Extractor)模式是 Axum 中一个非常重要的特性,它允许开发者从 HTTP 请求中提取所需的数据,并将其转换为合适的 Rust 类型。通过提取器,开发者可以方便地处理查询参数、JSON 数据、表单数据等,同时还能进行数据验证和错误处理。本文将深入剖析 Axum 提取器模式,包括内置提取器的使用场景、自定义提取器的实现以及错误处理与 FromRequest trait 的设计。

二、内置提取器的使用场景

2.1 Query 提取器

Query 提取器用于从 URL 的查询字符串中提取数据。在处理 GET 请求时,查询字符串通常用于传递一些可选的参数。例如,我们有一个处理用户搜索请求的 API,用户可以通过查询字符串指定搜索关键词和分页信息。以下是一个示例:

use axum::{routing::get,Router,extract::Query,
};
use serde::Deserialize;#[derive(Deserialize)]
struct SearchParams {keyword: String,page: u32,
}async fn search(Query(params): Query<SearchParams>) -> String {format!("Searching for '{}' on page {}", params.keyword, params.page)
}#[tokio::main]
async fn main() {let app = Router::new().route("/search", get(search));axum::Server::bind(&"127.0.0.1:3000".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
}

在这个示例中,SearchParams 结构体使用 serde::Deserialize 进行反序列化,Query 提取器会自动将查询字符串中的参数转换为 SearchParams 结构体的实例。当客户端访问 /search?keyword=rust&page=1 时,服务器会返回相应的搜索信息。

2.2 Json 提取器

Json 提取器用于从请求体中提取 JSON 数据。在处理 POST、PUT 等请求时,客户端通常会将数据以 JSON 格式发送到服务器。以下是一个处理用户注册请求的示例:

use axum::{routing::post,Router,extract::Json,
};
use serde::Deserialize;#[derive(Deserialize)]
struct UserRegistration {username: String,password: String,
}async fn register(Json(user): Json<UserRegistration>) -> String {format!("User '{}' registered successfully", user.username)
}#[tokio::main]
async fn main() {let app = Router::new().route("/register", post(register));axum::Server::bind(&"127.0.0.1:3000".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
}

在这个示例中,UserRegistration 结构体使用 serde::Deserialize 进行反序列化,Json 提取器会自动将请求体中的 JSON 数据转换为 UserRegistration 结构体的实例。当客户端发送包含 JSON 数据的 POST 请求到 /register 时,服务器会处理注册逻辑。

2.3 Form 提取器

Form 提取器用于从表单数据中提取信息。在处理 HTML 表单提交时,表单数据通常以 application/x-www-form-urlencodedmultipart/form-data 格式发送到服务器。以下是一个处理用户登录表单的示例:

use axum::{routing::post,Router,extract::Form,
};
use serde::Deserialize;#[derive(Deserialize)]
struct LoginForm {username: String,password: String,
}async fn login(Form(form): Form<LoginForm>) -> String {format!("User '{}' is trying to log in", form.username)
}#[tokio::main]
async fn main() {let app = Router::new().route("/login", post(login));axum::Server::bind(&"127.0.0.1:3000".parse().unwrap()).serve(app.into_make_service()).await.unwrap();
}

在这个示例中,LoginForm 结构体使用 serde::Deserialize 进行反序列化,Form 提取器会自动将表单数据转换为 LoginForm 结构体的实例。当客户端提交登录表单时,服务器会处理登录逻辑。

三、自定义提取器实现请求数据验证

有时候,内置提取器可能无法满足我们的需求,我们需要自定义提取器来实现更复杂的请求数据验证。例如,我们希望对用户输入的邮箱地址进行格式验证。以下是一个自定义提取器的示例:

use axum::{extract::{FromRequest, RequestParts},http::Request,body::Body,response::{IntoResponse, Response},
};
use serde::Deserialize;
use validator::Validate;
use validator::email::Email;#[derive(Deserialize, Validate)]
struct UserRegistration {#[validate(email)]email: String,password: String,
}struct ValidatedUserRegistration(UserRegistration);#[axum::async_trait]
impl FromRequest<Body> for ValidatedUserRegistration {type Rejection = Response;async fn from_request(req: &mut RequestParts<Body>) -> Result<Self, Self::Rejection> {let Json(user) = axum::extract::Json::<UserRegistration>::from_request(req).await.map_err(|e| {(axum::http::StatusCode::BAD_REQUEST, e.to_string()).into_response()})?;if let Err(errors) = user.validate() {return Err((axum::http::StatusCode::BAD_REQUEST, errors.to_string()).into_response());}Ok(ValidatedUserRegistration(user))}
}async fn register(ValidatedUserRegistration(user): ValidatedUserRegistration) -> String {format!("User with email '{}' registered successfully", user.email)
}

在这个示例中,我们定义了一个 UserRegistration 结构体,并使用 validator 库对邮箱地址进行格式验证。然后,我们自定义了一个 ValidatedUserRegistration 提取器,在 from_request 方法中,首先使用 Json 提取器提取请求体中的 JSON 数据,然后对数据进行验证。如果验证失败,返回一个包含错误信息的响应;如果验证成功,返回一个包含验证后数据的 ValidatedUserRegistration 实例。

四、错误处理与 FromRequest trait 设计

4.1 FromRequest trait

FromRequest 是 Axum 中用于定义提取器的核心 trait。当我们自定义提取器时,需要实现 FromRequest trait。该 trait 有两个关联类型:Rejection 表示提取失败时返回的类型,from_request 方法用于从请求中提取数据。以下是 FromRequest trait 的基本定义:

#[async_trait::async_trait]
pub trait FromRequest<B>
whereB: Send + 'static,
{type Rejection: IntoResponse;async fn from_request(req: &mut RequestParts<B>) -> Result<Self, Self::Rejection>;
}

4.2 错误处理

在自定义提取器的 from_request 方法中,我们需要处理各种可能的错误。当提取数据失败或数据验证不通过时,我们需要返回一个合适的错误响应。在前面的自定义提取器示例中,我们使用 axum::http::StatusCode::BAD_REQUEST 表示请求数据无效,并将错误信息作为响应体返回。这样,客户端可以根据返回的状态码和错误信息进行相应的处理。

五、总结

Axum 的提取器模式为 Rust Web 开发提供了强大而灵活的功能。通过内置提取器,我们可以方便地处理查询参数、JSON 数据和表单数据;通过自定义提取器,我们可以实现更复杂的请求数据验证。同时,FromRequest trait 和错误处理机制确保了提取器的可靠性和可维护性。在实际开发中,合理运用提取器模式可以提高代码的可读性和可维护性,为构建高效、安全的 Web 应用提供有力支持。

相关文章:

3.Rust + Axum 提取器模式深度剖析

摘要 深入解读 Rust Axum 提取器模式&#xff0c;涵盖内置提取器及自定义实现。 一、引言 在 Rust 的 Web 开发领域&#xff0c;Axum 作为一款轻量级且高效的 Web 框架&#xff0c;为开发者提供了强大的功能。其中&#xff0c;提取器&#xff08;Extractor&#xff09;模式…...

Dify vs n8n vs RAGFlow:2025年AI应用与自动化工作流平台的终极对决

我将为大家整理一份关于 Dify、n8n 和 Ragflow 的最新研究分析,涵盖以下六个方面:功能对比、应用场景、架构设计、集成能力、和使用门槛。我会尽可能引用其官方文档、GitHub 仓库以及社区讨论等权威信息来源。 我整理好后会第一时间通知你查看。 1.Dify、n8n 和 RAGFlow 最新…...

ffmpeg无损转格式的命令行

将ffmpeg.exe拖入命令行窗口 c:\users\zhangsan>D:\ffmpeg-2025-03-11\bin\ffmpeg.exe -i happy.mp4 -c:v copy -c:a copy 格式转换后.mkv -c:v copy 仅做拷贝视频,不重新编码 -c:a copy 仅做拷贝音频 ,不重新编码...

Flutter 常用命令

1、创建项目 flutter create <项目名称> 示例&#xff1a; flutter create my_app 1.1 参数说明 --org&#xff1a;设置包名&#xff08;默认 com.example&#xff09; flutter create --org com.yourcompany my_app -a/-i&#xff1a;指定语言&#xff08;Kotlin…...

【零基础】基于DeepSeek-R1与Qwen2.5Max的行业洞察自动化平台

自动生成行业报告,通过调用两个不同的大模型(DeepSeek 和 Qwen),完成从行业趋势分析到结构化报告生成的全过程。 完整代码:https://mp.weixin.qq.com/s/6pHi_aIDBcJKw1U61n1uUg 🧠 1. 整体目的与功能 该脚本实现了一个名为 ReportGenerator 的类,用于: 调用 DeepSe…...

UE5 关卡序列

文章目录 介绍创建一个关卡序列编辑动画添加一个物体编辑动画时间轴显示秒而不是帧时间轴跳转到一个确定的时间时间轴的显示范围更改关键帧的动画插值方式操作多个关键帧 播放动画 介绍 类似于Unity的Animation动画&#xff0c;可以用来录制场景中物体的动画 创建一个关卡序列…...

1.凸包、极点、极边基础概念

目录 1.凸包 2.调色问题 3.极性(Extrem) 4.凸组合(Convex Combination) 5.问题转化(Strategy)​编辑 6.In-Triangle test 7.To-Left-test 8.极边&#xff08;Extream Edges&#xff09; 1.凸包 凸包就是上面蓝色皮筋围出来的范围 这些钉子可以转换到坐标轴中&#xff0…...

MahApps.Metro:专为 WPF 应用程序设计的 UI 框架

推荐一个WPF 应用程序设计的 UI 框架&#xff0c;方便我们快速构建美观、流畅的应用程序。 01 项目简介 MahApps.Metro 是一个开源的 UI 框架&#xff0c;它可以让开发者快速构建现代化、美观的 WPF 应用程序。 提供了一套完整的 UI 组件和主题&#xff0c;支持流畅的动画效…...

【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini,Spring Boot整合实战!| 附源码

【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini&#xff0c;Spring Boot整合实战&#xff01; 前言&#xff1a;当Java遇上大模型 在AI浪潮席卷全球的今天&#xff0c;Java开发者如何快速拥抱大语言模型&#xff1f;LangChain4j作为专为Java打造的AI开发框架&#xff0c…...

乐言科技:云原生加速电商行业赋能,云消息队列助力降本 37%

深耕 AI SaaS&#xff0c;助力数万电商客户数智化转型 上海乐言科技股份有限公司&#xff08;以下简称“乐言科技”&#xff0c;官网&#xff1a;https://www.leyantech.com/&#xff09;自 2016 年成立以来&#xff0c;专注于利用自然语言处理和深度学习等核心 AI 技术&#…...

vscode构建简单编译和调试环境

一、设置环境变量‌ 将bin目录路径&#xff08;如D:\DevTools\mingw64\bin&#xff09;加入系统环境变量PATH‌34 ‌二、VS Code插件配置‌ ‌核心插件安装‌ ‌C/C‌&#xff08;微软官方扩展&#xff0c;提供语法高亮、智能提示&#xff09;‌‌Code Runner‌&#xff0…...

STM32控制DRV8825驱动42BYGH34步进电机

最近想玩一下人工智能&#xff0c;然后买了个步进电机想玩一下&#xff0c;刚到了一脸懵逼&#xff0c;发现驱动器20多块&#xff0c;有点超预算&#xff0c;然后整了个驱动板&#xff0c;方便自己画线路板&#xff0c;经过各种搜索&#xff0c;终于转起来了&#xff0c;记录一…...

系统清理专家,一键释放磁盘空间!

打工人们你们好&#xff01;这里是摸鱼 特供版~ 今天给大家带来一款超实用的系统清理工具——Glary Disk Cleaner&#xff0c;帮助你快速清理系统中的垃圾文件&#xff0c;释放磁盘空间&#xff0c;提升系统运行速度&#xff01; 推荐指数&#xff1a;★★★★★ 软件简介 G…...

识别法院PDF文件特定字段并插入数据库【正则表达式+本地化部署】

pdf解析法院协助单特定字段&#xff0c;开源项目&#xff0c;结合若依项目进行开发&#xff0c;不连互联网&#xff0c;本地开发部署&#xff0c;前端使用vue3技术,后端用若依分离版spring botot技术&#xff0c;实现将pdf法院协助执行通知书中的特定字段如&#xff1a;时间、文…...

探索智能体开发新范式:Cangjie Magic深度解析与实践指南

引言&#xff1a;智能体开发的新纪元 2025年3月&#xff0c;仓颉社区开源了基于仓颉编程语言原生构建的LLM Agent开发平台——Cangjie Magic&#xff0c;为智能体开发领域带来了革命性的变革。作为一名长期关注AI技术发展的开发者&#xff0c;我有幸在第一时间体验了这一创新平…...

计算机网络 - UDP协议

通过一些问题来讨论 UDP 协议 什么是 UDP&#xff1f;举几个应用了 UDP 协议的例子UDP 与 TCP 有啥区别&#xff1f;&#xff08;PS&#xff1a;介绍三四个就可以了&#xff0c;不用说太多&#xff09;具体 UDP 是不可靠的&#xff0c;那你觉得如何实现一个可靠的 UDP &#x…...

阿里云ECS访问不了

使用xshell连接阿里云ECS&#xff0c;下载nginx&#xff0c;然后启动 sudo systemctl start nginx 查看状态是 sudo systemctl status nginx 输入公网ip访问实例访问不到&#xff0c;出现 可以查看阿里云实例中的安全组&#xff0c;是否对外开放了80端口和443端口 添加入方向…...

Starrocks添删改查数据(二)

先安装好Starrocks&#xff0c;参考&#xff1a;Starrocks入门&#xff08;二&#xff09;_backend node not found. check if any backend node -CSDN博客 1、建立库 建库成功。 2、建立表 参考&#xff1a;表概览 | StarRocks 执行如下SQL&#xff1a; CREATE TABLE user_…...

RT-Thread学习笔记(一)

RT-Thread学习笔记 AIotMMUCPU架构RT-Thread版本工程创建时钟配置FinSH内核RT-Thread内核启动流程 RT-Thread是一个组件完整丰富、高度可伸缩、简易开发、超低功耗、高安全性的物联网操作系统 全称Real Time Thread AIot AIot&#xff1a; Artificial Intelligence of Things…...

【源码】30个Python小游戏

下载链接&#xff1a;https://github.com/pyGuru123/Python-Games 本站下载链接&#xff1a;【免费】源码30个Python小游戏资源-CSDN文库 包含&#xff1a;飞机大战、愤怒的墙、圆弧冲刺、行星游戏、弹跳的球、汽车避障、洞穴物语、愤怒的小鸟、丛林探险、扫雷、俄罗斯方块、…...

【Web前端技术】第二节—HTML标签(上)

hello&#xff01;好久不见—— 做出一个属于自己的网站&#xff01; 云边有个稻草人-个人主页 Web前端技术—本篇文章所属专栏 目录 一、HTML 语法规范 1.1 基本语法概述 1.2 标签关系 二、HTML 基本结构标签 2.1 第一个 HTML 网页 2.2 基本结构标签总结 三、网页开发…...

Android开发协调布局滑动悬停

Android开发协调布局滑动悬停 直接给个xml&#xff0c;防止下次忘了怎么写。 <?xml version"1.0" encoding"utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android"http://schemas.android.com/apk/res/android…...

R语言简介与下载安装

1.R语言简介与下载安装 R语言其诞生于新西兰奥克兰大学&#xff0c;由Ross Ihaka 和Robert Gentleman开发&#xff0c;属于商业软件S语言的替代品&#xff1b;R语言是一款开源的编程类工具&#xff0c;专门用于数据清洗、整理、统计分析、可视化以及数据挖掘等方面&#xff0c…...

CGAL边折叠edge_collapse的问题

使用edge_collapse对一个模型简化&#xff0c;之后回收垃圾&#xff0c;collect_garbage 处理之前的顶点和三角形数量&#xff1a; number_of_vertices: 955730 number_of_faces: 1903410 num_vertices: 955730 num_faces: 1903410 处理之后的顶点和三角形数量&#xff1a;…...

2025 全球分布式云大会演讲实录 | 沈建发:智启边缘,畅想未来:边缘计算新场景落地与 Al 趋势新畅想

4 月 9 日&#xff0c;2025 全球分布式云大会暨 AI 基础设施大会在深圳成功举办&#xff0c;火山引擎边缘云产品解决方案高级总监沈建发出席并以《智启边缘&#xff0c;畅想未来&#xff1a;边缘计算新场景落地与 Al 趋势新畅想》为主题&#xff0c;分享了边缘计算在 AI 技术趋…...

【ELF2学习板】OpenCL程序测试

目录 引言 OpenCL简介 主要特点 编程模型 应用场景 测试程序 代码说明 构建编译环境 头文件 库文件 程序编译 测试结果 结语 引言 ELF2开发板采用的是RK3588处理器&#xff0c;它是瑞芯微推出的一款高性能 SoC。RK3588 集成了 ARM Mali-G610 MP4 GPU&#xff0c;…...

EtherCAT转ProfiNet边缘计算网关配置优化:汽车制造场景下PLC与机器人协同作业案例

1.行业背景与需求分析 智能汽车焊装车间是汽车制造的核心工艺环节&#xff0c;某德国豪华品牌在其上海MEB工厂新建的焊装车间中&#xff0c;采用西门子S7-1500PLC作为ProfiNet主站&#xff0c;负责整线协调与质量追溯&#xff1b;同时部署KUKAKR1500Titan机器人&#xff08;Eth…...

AI 推理与训练优化的核心理论体系建构及关键技术分析框架

AI 推理与训练优化的核心理论体系建构及关键技术分析框架 一、推理加速的动态系统理论建模与算法设计 &#xff08;一&#xff09;基于MDP的动态计算图理论 生物启发的决策框架&#xff1a;模拟灵长类视觉系统的注意力分配机制&#xff0c;构建马尔可夫决策过程&#xff08;M…...

Jupyter 中 Markdown 邂逅 LaTeX:一场知识的绮梦

引言&#xff1a; 在日常编程和数据分析工作中&#xff0c;我们经常需要记录和分享信息。传统的注释方式功能有限&#xff0c;而富文本编辑器又过于臃肿。Markdown作为一种轻量级标记语言&#xff0c;完美解决了这个问题。 为什么选择Markdown&#xff1f; Markdown具有两大优势…...

AI 对话高效输入指令攻略(二):关于豆包的指令

免责声明&#xff1a;该文章的所有样例只是测试&#xff0c;没有唆使大家利用AI抄袭作业&#xff01;更没有宣传豆包。 前言 没有听不懂话的AI&#xff0c;只有不会调教AI的人。&#xff08;自己瞎说的&#xff09;当你把AI当人看之后&#xff0c;你就会发现&#xff0c;他是多…...

Apache Atlas构建安装(Linux)

一、环境准备 maven 3.6.3python 2.7nodejs 12java 1.8 注意环境一定要对&#xff0c;不然一堆问题 1. python2.7 安装 参考文章&#xff1a;https://blog.csdn.net/weixin_42081389/article/details/101276251 打开链接&#xff1a;https://www.python.org/downloads/sourc…...

【JAVA】在idea新加artifact时,点击Build-Build Artifacts时,新加的artifact不能选中

首先保证添加artifact无问题&#xff0c;比如依赖都正确、无重复命令的情况等 办法 一 File > Invalidate Caches / Restart。 重启IDEA后&#xff0c;重新检查Artifact是否可选 办法 二 打开 Project Structure&#xff08;CtrlShiftAltS&#xff09;。 进入 Artifacts 选…...

【杂谈】-自动驾驶变革:货运革新与机器人出租车崛起

自动驾驶变革&#xff1a;货运革新与机器人出租车崛起 文章目录 自动驾驶变革&#xff1a;货运革新与机器人出租车崛起一、市场主导力量二、机器人出租车的崛起三、货运运输的变革四、商业视角下的分析五、责任归属问题 汽车行业&#xff0c;凭借其在道路状况、车辆性能及整体环…...

吊顶上的灯线怎么预留?是提前到位还是后期随意拉拽?

业主问家里的灯线怎么预留&#xff1f; 问业主灯线指的是主灯还是射灯&#xff1f; 业主说他家里边要做边吊&#xff0c;边吊上边要放一些射灯。 在射灯上方对应的留灯线就可以&#xff0c;不用特别的精确&#xff0c;把线头放的稍微长一点即可。 这位业主又说为什么要这样预留…...

网易游戏 x Apache Doris:湖仓一体架构演进之路

导读&#xff1a;网易游戏引入 Apache Doris 升级架构&#xff0c;先是替换 Elasticsearch、Hbase、Clickhouse 构建了实时数仓&#xff0c;而后基于 Apache Doris 和 Iceberg 构建了湖仓融合架构&#xff0c;实现架构的大幅简化及统一。目前&#xff0c;网易游戏 Apache Doris…...

大模型会不会取代人类工作

大模型是否会取代人类工作&#xff1f; 随着人工智能技术的迅猛发展&#xff0c;尤其是大型语言模型&#xff08;如GPT-4、BERT等&#xff09;的出现&#xff0c;人们开始担忧这些先进的技术是否会在未来取代人类的工作。这种担忧并非空穴来风&#xff0c;历史上每一次技术革命…...

深入理解 Linux 权限管理:从 Shell 到文件权限

&#x1f33c;&#x1f33c; 在 Linux 系统中&#xff0c;权限是保障系统安全与稳定的核心之一。每个操作都可能涉及权限的管理和控制&#xff0c;特别是当你开始以不同用户的身份进行操作时。本文将通过生动的比喻与详细的技术解析&#xff0c;带你一起深入理解 Linux 权限系统…...

.net core 项目快速接入Coze智能体-开箱即用-全局说明

目录 一、Coze智能体的核心价值 二、开箱即用-效果如下 三 流程与交互设计 为什么要分析意图&#xff0c;而不是全部交由AI处理。 四 接入前的准备工作 五&#xff1a;代码实现----字节Coze 签署 JWT和获取Token .net core 项目快速接入Coze智能体-开箱即用 .net core快…...

React 开放封闭原则详解,构建可扩展的应用

开放封闭原则 React 采用了一些面向对象编程的原则和概念&#xff0c;其中之一就是开放封闭原则&#xff08;Open-Closed Principle&#xff0c;OCP&#xff09;&#xff0c;它是面向对象编程的一个基本原则。本文将详细解释开放封闭原则的概念和在 React 中的应用&#xff0c;…...

【并行分布计算】Hadoop完全分布搭建

Hadoop完全分布搭建 1.为了使机器都处于同一个局域网中&#xff0c;先要修改机器的ip地址分配方式为固定ip&#xff0c;并为其固定分配一个ip地址。 [rootlocalhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 问题&#xff1a;修改ip地址后&#xff0c;网络无法正常…...

Three.js + React 实战系列 : 从零搭建 3D 个人主页

可能你对tailiwindcss毫不了解&#xff0c;别紧张&#xff0c;记住我们只是在学习&#xff0c;学习的是作者的思想和技巧&#xff0c;并不是某一行代码。 在之前的几篇文章中&#xff0c;我们已经熟悉了 Three.js 的基本用法&#xff0c;并通过 react-three-fiber 快速构建了一…...

四月十六日华为发布会

智能家居及穿戴类 华为智能门锁 2 系列发布&#xff1a;2025 年 4 月 16 日&#xff0c;华为智能门锁 2 系列正式发布。该系列引入 AI 掌静脉识别技术和 AI 3D 人脸识别 3.0&#xff0c;具备高安全性&#xff1b;采用超清智能大猫眼&#xff0c;可视范围达 161&#xff1b;通过…...

23种设计模式-创建型模式之工厂方法模式(Java版本)

Java 工厂方法模式&#xff08;Factory Method Pattern&#xff09;详解 &#x1f31f; 什么是工厂方法模式&#xff1f; 工厂方法模式是一种创建型设计模式&#xff0c;定义一个创建对象的接口&#xff0c;让子类决定实例化哪一个类。 它让类的实例化推迟到子类进行&#xf…...

基于FreeBSD的Unix系统搭建Nginx+PHP5运行环境

服务器操作系统版本&#xff1a;FreeBSD-10.1-i386 Nginx安装配置 1.以ports形式安装 #进入nginx目录 cd /usr/ports/www/nginx #执行编译安装 make install 2.编辑配置文件 #进入etc目录 cd /etc #编辑配置文件 ee rc.conf #进入编辑模式 i #参照如下设置 nginx_enable”YES…...

医院处方外流对接外部药房系统(合规python代码版)

系统概述 本系统旨在帮助医院实现与外部零售药店的安全、合规对接,满足2025年医保局和卫健委关于处方流转的最新规定。系统采用Python开发,基于RESTful API实现医院HIS系统与外部药房之间的处方信息传输、医保支付验证和处方状态跟踪等功能。 系统架构 #mermaid-svg-zKU5Wj…...

第十七届“华中杯”B 题校园共享单车的调度与维护问题分析

问题1&#xff1a;估算共享单车总量及不同停车点位在不同时间点的数量分布 首先&#xff0c;我们需要对附件1的数据进行汇总&#xff0c;以估算出校园内的共享单车总量。由于数据是按不同时间和停车点位统计的&#xff0c;我们可以通过对所有时间和点位的单车数量进行求和&…...

线程池的封装(c/c++)

前言&#xff1a;本文将要封装的线程池相关接口是基于之前一篇文章中的实现&#xff08;文章链接&#xff1a;Linux多线程编程的艺术&#xff1a;封装线程、锁、条件变量和信号量的工程实践-CSDN博客&#xff09;。不过无需担心&#xff0c;即使您没有阅读过前文&#xff0c;只…...

「数据可视化 D3系列」入门第六章:比例尺的使用

比例尺的使用 一、比例尺是什么&#xff1f;典型示例&#xff1a; 二、常用比例尺类型1. 线性比例尺 (scaleLinear)2. 序数比例尺 (scaleOrdinal)3. 其他常用比例尺类型&#xff1a; 三、实际应用主要改进点说明 四、比例尺的高级用法1. 颜色比例尺2. 时间比例尺3. 分段比例尺 …...

巧用ChatGPT生成适合小白的Python练习题,助力编程入门

&#x1f381;个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f50d;系列专栏&#xff1a;AI 【前言】 在Python学习的道路上&#xff0c;练习题是帮助小白快速掌握编程知识和技能的重要工具。然而&#xff0c;…...

iOS15描述文件在哪下载?iOS15测试版描述文件下载与升级教程

iOS 15正式发布&#xff1a;全面升级体验与开发者工具推荐 今天凌晨&#xff0c;备受关注的WWDC21开发者大会上如期召开&#xff0c;果粉期待已久的新一代iOS 15操作系统正式发布。iOS 15系统带来了全新FaceTime与通知界面&#xff0c;并对照片、天气、钱包、地图等应用进行了…...