FastAPI实战起步:从Python环境到你的第一个“Hello World”API接口

news2025/6/12 8:35:03

上一篇文章中介绍了有关FastAPI的优势,本篇文章我将手把手带你从零开始,搭建FastAPI的开发环境,并成功运行你的第一个“Hello World”API。在开始之前,请确保你的电脑已经安装了Python 3.7或更高版本,以及VS Code(推荐安装其Python扩展,体验更佳)。

夯实基础:为何“虚拟环境”是Python开发的必备技能?

在正式安装FastAPI之前,我们必须先聊聊一个Python开发中至关重要的概念——虚拟环境 (Virtual Environment)。这可不是什么可有可无的“高级技巧”,而是保证项目稳定性和可维护性的基石。

1. 告别混乱:虚拟环境如何解决“包依赖冲突”的噩梦?

想象一下这个常见的场景:

  • 你手头有两个Python项目:老项目A依赖 some_package1.0 版本。
  • 新项目B想尝鲜,需要 some_package2.0 新特性。

如果你不使用虚拟环境,直接在全局Python环境中安装和升级包,那么升级到 2.0 版本后,老项目A很可能因为版本不兼容而“罢工”。这种“牵一发而动全身”的依赖冲突,是许多开发者的痛点。

2. 专属空间:虚拟环境的“隔离与独立”魔法

虚拟环境就像为你的每个Python项目量身打造的一个个独立的、干净的“沙箱”。每个沙箱内部都有一套自己的Python解释器和已安装的库,它们与全局Python环境以及其他项目的虚拟环境完全隔离,互不干扰。

  • 项目A的虚拟环境:安装 some_package==1.0
  • 项目B的虚拟环境:安装 some_package==2.0
    完美!两个项目都能在各自所需的环境中愉快运行。

3. 实战演练:创建与激活你的第一个虚拟环境

FastAPI官方和社区普遍推荐使用Python内置的 venv 模块来管理虚拟环境。操作起来非常简单:

  • 第一步:创建虚拟环境
    打开你的终端(Windows用户是命令提示符或PowerShell,Mac/Linux用户是Terminal),cd到你打算存放项目的文件夹(比如你在VS Code里打开的 fast_api_project 文件夹)。然后运行:

    python -m venv venv
    # 或使用python3
    python3 -m venv venv
    

    这里的 venv (第二个) 是你给虚拟环境文件夹起的名字,你可以自定义,但 venv 是一个常见的约定。执行后,你会看到项目下多了一个 venv 文件夹。

  • 第二步:激活虚拟环境
    创建好后,你需要“进入”这个环境才能使用它:

    • Windows 用户:
      .\venv\Scripts\activate
      
      (注意:某些PowerShell版本可能需要执行 .\venv\Scripts\activate.ps1,并可能需要调整执行策略 Set-ExecutionPolicy Unrestricted -Scope Process)
    • Mac/Linux 用户:
      source venv/bin/activate
      

    激活成功后,你的终端提示符最前面会出现 (venv) 字样,这表明你现在的所有Python操作都将在这个隔离的环境中进行。

  • 第三步:让VS Code“认得”你的虚拟环境
    为了让VS Code在运行和调试代码时使用正确的Python解释器(即虚拟环境中的那个),你需要进行配置:

    1. 在VS Code中打开你的项目文件夹。
    2. 通常,当你创建或打开一个 .py 文件时,VS Code会自动检测到 venv 文件夹并询问你是否使用它。
    3. 如果未自动提示,可以点击VS Code状态栏左下角的Python版本号区域,或者按 Ctrl+Shift+P (Windows/Linux) / Cmd+Shift+P (Mac) 打开命令面板,输入 Python: Select Interpreter
    4. 在弹出的列表中,选择指向你虚拟环境中的Python解释器路径(通常是 .\venv\Scripts\python.exevenv/bin/python)。
      现在,VS Code已经和你的虚拟环境“心意相通”了!

FastAPI初探:你的第一个API接口诞生记

环境就绪,是时候迎接我们的主角——FastAPI了!

1. 安装FastAPI全家桶

确保你的虚拟环境已经激活 (终端提示符前有 (venv) ),然后运行以下命令:

pip install "fastapi[all]"

这个 [all] 非常关键!它不仅安装了FastAPI核心库,还一并安装了 uvicorn (一个快如闪电的ASGI服务器,用于运行你的API) 和 pydantic (强大的数据验证和模型定义库) 等必备组件,为你省去了逐个安装的麻烦。
安装完成后,可以运行 pip freeze 看看虚拟环境里都装了些什么包。

2. 编写你的第一个“Hello World”API

在你的项目根目录下(例如 fast_api_project 文件夹),创建一个名为 main.py 的Python文件,然后将下面的代码复制进去:

# main.py
from fastapi import FastAPI  # 1. 从fastapi库导入FastAPI类

app = FastAPI()  # 2. 创建一个FastAPI的实例,这个实例就是你API应用的核心

# 3. 定义一个“路径操作” (Path Operation)
@app.get("/")  # 这是一个装饰器,告诉FastAPI:当有HTTP GET请求访问根路径("/")时,
              # 就调用下面的函数来处理
def read_root():  # 4. 这就是路径操作函数,你可以给它取任何名字(但最好有意义)
    return {"message": "Hello World, FastAPI!"}  # 5. 函数返回一个Python字典,
                                              # FastAPI会自动把它转换成JSON格式的响应

短短几行代码,一个简单的API就诞生了!

  • 我们导入了 FastAPI 类。
  • 创建了一个 app 实例,它是我们所有API功能的主入口。
  • 使用 @app.get("/") 装饰器,我们定义了一个路径操作。这里的 @app.get 表示这个操作会响应HTTP的 GET 请求,而 ("/") 指定了这个操作对应的URL路径是根路径。
  • read_root 函数是实际处理请求的逻辑,它返回一个字典,FastAPI会智能地将其转换为JSON响应发送给客户端。

3. 启动你的API服务

保持虚拟环境激活状态,在终端中,确保当前目录是 main.py 所在的目录,然后运行:

uvicorn main:app --reload

解读一下这个命令:

  • uvicorn: 我们之前安装的ASGI服务器,专门用来运行FastAPI这类异步Python Web应用。
  • main:app: 这告诉Uvicorn去哪里找我们的FastAPI应用。main 指的是 main.py 文件名(不带.py后缀),app 指的是我们在 main.py 文件中创建的 FastAPI() 实例的变量名。
  • --reload: 这个参数是开发时的好帮手。它会监视你的代码文件,一旦你保存了修改,Uvicorn会自动重启服务,让你立即看到效果,无需手动停止再启动。

如果一切顺利,终端会显示类似下面的信息,告诉你服务已经启动并正在监听 http://127.0.0.1:8000

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [xxxx] using statreload
INFO:     Started server process [xxxx]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

现在,打开你的浏览器,访问 http://127.0.0.1:8000 (或者 http://localhost:8000)。你应该会看到一个清爽的JSON响应:{"message": "Hello World, FastAPI!"}

太棒了!你已经成功搭建了FastAPI开发环境,并亲手创建并运行了你的第一个API接口!

总结与展望

通过本篇教程,你已经成功迈出了FastAPI开发的第一步:

  • 深刻理解了为何要使用Python虚拟环境,并掌握了其创建与激活方法。
  • 顺利安装了FastAPI及其核心伙伴 uvicorn
  • 编写并成功运行了你的第一个FastAPI应用,见证了“Hello World”的诞生。

这只是冰山一角!FastAPI的魅力远不止于此。接下来,你可能会想:

  • 如何测试更复杂的API? 除了浏览器,专业API测试工具如Postman或Insomnia是你的好帮手,它们能发送各种HTTP请求(POST, PUT, DELETE等)。
  • FastAPI传说中的自动文档在哪里? 尝试在浏览器中访问 http://localhost:8000/docs (Swagger UI) 或 http://localhost:8000/redoc (ReDoc),你会发现FastAPI已经为你准备好了精美的交互式API文档!

在我们的第一个 “Hello World” 示例中,你已经接触到了FastAPI的一个核心概念:@app.get("/")。这其实就是所谓的**“路径操作”(Path Operations)。它如何与不同的HTTP方法**(如GET, POST, PUT, DELETE)协同工作,构建出API的各种功能呢?

在下一篇文章中,我们将深入探索FastAPI的基石——“路径操作”(Path Operations)与HTTP方法。你将学会如何定义不同的API端点,处理不同的请求类型,并真正开始构建功能丰富的API。敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2405632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用vue3+ts+input封装上传组件,上传文件显示文件图标

效果图&#xff1a; 代码 <template><div class"custom-file-upload"><div class"upload"><!-- 显示已选择的文件 --><div class"file-list"><div v-for"(item, index) in state.filsList" :key&q…

【Linux】Ubuntu 创建应用图标的方式汇总,deb/appimage/通用方法

Ubuntu 创建应用图标的方式汇总&#xff0c;deb/appimage/通用方法 对于标准的 Ubuntu&#xff08;使用 GNOME 桌面&#xff09;&#xff0c;desktop 后缀的桌面图标文件主要保存在以下三个路径&#xff1a; 当前用户的桌面目录&#xff08;这是最常见的位置&#xff09;。所…

LangGraph--Agent工作流

Agent的工作流 下面展示了如何创建一个“计划并执行”风格的代理。 这在很大程度上借鉴了 计划和解决 论文以及Baby-AGI项目。 核心思想是先制定一个多步骤计划&#xff0c;然后逐项执行。完成一项特定任务后&#xff0c;您可以重新审视计划并根据需要进行修改。 般的计算图如…

Spring Boot 常用注解面试题深度解析

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot 常用注解面试题深度解析一、核心…

Linux系统的CentOS7发行版安装MySQL80

文章目录 前言Linux命令行内的”应用商店”安装CentOS的安装软件的yum命令安装MySQL1. 配置yum仓库2. 使用yum安装MySQL3. 安装完成后&#xff0c;启动MySQL并配置开机自启动4. 检查MySQL的运行状态 MySQL的配置1. 获取MySQL的初始密码2. 登录MySQL数据库系统3. 修改root密码4.…

408第一季 - 数据结构 - 栈与队列

栈 闲聊 栈是一个线性表 栈的特点是后进先出 然后是一个公式 比如123要入栈&#xff0c;一共有5种排列组合的出栈 栈的数组实现 这里有两种情况&#xff0c;&#xff0c;一个是有下标为-1的&#xff0c;一个没有 代码不用看&#xff0c;真题不会考 栈的链式存储结构 L ->…

【RTP】Intra-Refresh模式下的 H.264 输出,RTP打包的方式和普通 H.264 流并没有本质区别

对于 Intra-Refresh 模式下的 H.264 输出,RTP 打包 的方式和普通 H.264 流并没有本质区别:你依然是在对一帧一帧的 NAL 单元进行 RTP 分包,只不过这些 NAL 单元内部有部分宏块是 “帧内编码” 而已。下面分步骤说明: 1. 原理回顾:RFC 6184 H.264 over RTP 按照 RFC 6184 …

Redis实战-消息队列篇

前言&#xff1a; 讲讲做消息队列遇到的问题。 今日所学&#xff1a; 异步优化消息队列基于stream实现异步下单 1. 异步优化 1.1 需求分析 1.1.1 现有下单流程&#xff1a; 1.查询优惠劵 2.判断是否是秒杀时间&#xff0c;库存是否充足 3.实现一人一单 在这个功能中&…

(三)Linux性能优化-CPU-CPU 使用率

CPU使用率 user&#xff08;通常缩写为 us&#xff09;&#xff0c;代表用户态 CPU 时间。注意&#xff0c;它不包括下面的 nice 时间&#xff0c;但包括了 guest 时间。nice&#xff08;通常缩写为 ni&#xff09;&#xff0c;代表低优先级用户态 CPU 时间&#xff0c;也就是进…

佰力博科技与您探讨材料介电性能测试的影响因素

1、频率依赖性 材料的介电性能通常具有显著的频率依赖性。在低频下&#xff0c;偶极子的取向极化占主导&#xff0c;介电常数较高&#xff1b;而在高频下&#xff0c;偶极子的取向极化滞后&#xff0c;导致介电常数下降&#xff0c;同时介电损耗增加。例如&#xff0c;VHB4910…

K8S认证|CKS题库+答案| 4. RBAC - RoleBinding

目录 4. RBAC - RoleBinding 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、查看SA和role 3&#xff09;、编辑 role-1 权限 4&#xff09;、检查role 5&#xff09;、创建 role和 rolebinding 6&#xff0…

React 新项目

使用git bash 创建一个新项目 建议一开始就创建TS项目 原因在Webpack中改配置麻烦 编译方法:ts compiler 另一种 bable 最好都配置 $ create-react-app cloundmusic --template typescript 早期react项目 yarn 居多 目前npm包管理居多 目前pnpm不通用 icon 在public文件夹中…

AI编程在BOSS项目的实践经验分享

前言 在人工智能技术革新浪潮的推动下&#xff0c;智能编程助手正以前所未有的速度重塑开发领域。这些基于AI的代码辅助工具通过智能提示生成、实时错误检测和自动化重构等功能&#xff0c;显著提升了软件工程的全流程效率。无论是初入行业的开发者还是资深程序员&#xff0c;…

数学:”度量空间”了解一下?

度量空间是现代数学中一种基本且重要的抽象空间。以下是对它的详细介绍&#xff1a; 定义 相关概念 常见的度量空间举例 度量空间的类型 度量空间的作用 度量空间是拓扑空间的一种特殊情况&#xff0c;它为拓扑空间的研究提供了具体的模型和实例。同时&#xff0c;度量空间在…

jenkins脚本查看及备份

位置与备份 要完整备份 Jenkins 的所有脚本和相关配置&#xff0c;包括 Jenkinsfile、构建脚本&#xff08;如 .sh / .bat&#xff09;、Job 配置、插件、凭据等&#xff0c;你可以从两个层面入手&#xff1a; ✅ 一、完整备份 Jenkins 主目录&#xff08;最全面&#xff09; …

用电脑通过网口控制keysight示波器

KEYSIGHT示波器HD304MSO性能 亮点: 体验 200 MHz 至 1 GHz 的带宽和 4 个模拟通道。与 12 位 ADC 相比,使用 14 位模数转换器 (ADC) 将垂直分辨率提高四倍。使用 10.1 英寸电容式触摸屏轻松查看和分析您的信号。捕获 50 μVRMS 本底噪声的较小信号。使用独有区域触摸在几秒…

《如何使用MinGW-w64编译OpenCV和opencv_contrib》

《如何使用MinGW-w64编译OpenCV和opencv_contrib》 在Windows环境下使用MinGW编译OpenCV和opencv_contrib是一个常见需求,尤其是对于那些希望使用GCC工具链而非Visual Studio的开发者。下面我将详细介绍这个过程。 准备工作 首先需要安装和准备以下工具和库: MinGW(建议使…

模拟搭建私网访问外网、外网访问服务器服务的实践操作

目录 实验环境 实践要求 一、准备工作 1、准备四台虚拟机&#xff0c;分别标号 2、 防火墙额外添加两块网卡&#xff0c;自定义网络连接模式 3、 关闭虚拟机的图形管理工具 4、关闭防火墙 5、分别配置四台虚拟机的IP地址&#xff0c;此处举一个例子&#xff08;使用的临…

vue中Echarts的使用

文章目录 Echarts概述什么是EchartsEcharts的好处 Vue中Echarts的使用Echarts的安装Echarts的引入 Echarts概述 什么是Echarts Apache ECharts&#xff1a;一个基于 JavaScript 的开源可视化图表库。 其官网如下&#xff1a;https://echarts.apache.org/zh/index.html Echar…

【C++项目】负载均衡在线OJ系统-1

文章目录 前言项目结果演示技术栈&#xff1a;结构与总体思路compiler编译功能-common/util.hpp 拼接编译临时文件-common/log.hpp 开放式日志-common/util.hpp 获取时间戳方法-秒级-common/util.hpp 文件是否存在-compile_server/compiler.hpp 编译功能编写&#xff08;重要&a…