Web初识与FastAPI入门

Web初识与FastAPI入门

2026年9月20日·#编程学习/python学习笔记Python/Web开发·1189 字 6 分钟
浏览量加载中...
AI 摘要

Web 网站的三个组成部分与 FastAPI 的四步入门用法、两种启动方式,以及 uvicorn 是什么

Web 初识#

Web:全球广域网,也称为万维网(www,World Wide Web),能够通过浏览器访问到的网站。

一个 Web 网站由三个核心部分组成:

部分作用用什么做
前端程序界面展示HTML(结构)+ CSS(表现)+ JavaScript(行为)
服务端程序业务逻辑处理Python 里可用 Django / Flask / FastAPI
数据库数据存储和管理MySQL 等(本章案例用 JSON 文件代替)
Note

前端三件套的分工在第 4 章(爬虫)里已经见过:HTML 管结构、CSS 管样式、JS 管交互。这里要写的是服务端

FastAPI 是什么#

FastAPI 是一个现代、快速、高性能的 Web 框架,用于基于标准的 Python 类型提示构建 API 接口服务。

官网:https://fastapi.org.cn

API 接口:应用程序编程接口(Application Programming Interface),就是对外提供的功能入口,供别人来调用(比如天气查询的 API 接口)。一次调用的过程就是:客户端发 HTTP 请求 → 服务端返回 HTTP 响应。

四步写出第一个接口#

from fastapi import FastAPI # 1. 导入 FastAPI
app = FastAPI() # 2. 创建 FastAPI 实例
@app.get("/") # 3. 创建路径操作函数,定义访问路径
def root():
return {"message": "Hello World"}
@app.get("/users")
def get_users():
return [
{"id": 1, "name": "张三"},
{"id": 2, "name": "李四"},
{"id": 3, "name": "王五"},
]
if __name__ == "__main__": # 4. 运行 FastAPI 服务
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
步骤代码
1. 导入from fastapi import FastAPI
2. 创建实例app = FastAPI()
3. 定义接口@app.get("/路径") + 函数(函数返回值就是接口返回的数据)
4. 运行服务命令行 fastapi dev "xxxx.py"uvicorn xxxx:app --reload;也可以写在代码里 uvicorn.run(...)

两种启动方式#

Terminal window
# 方式一:FastAPI 官方 CLI
fastapi dev "main.py"
# 方式二:直接用 uvicorn(xxxx:app 表示"文件:FastAPI实例名")
uvicorn main:app --reload
名词说明
uvicorn专门为现代 Python Web 框架(FastAPI、Starlette)设计的高性能服务器
main:app文件 main.py 里的 app 对象
--reload改代码后自动重启(开发时用)
Tip

启动后浏览器打开 http://127.0.0.1:8000 就能看到接口返回的 JSON;FastAPI 还自带交互式接口文档,打开 /docs 就能直接在网页上试接口——这也是它比 Django/Flask 更适合做 API 的地方

相关#

练习题#

一、回忆填空(写完再展开对答案)#

  1. Web 全称 ____,是能通过 ____ 访问到的网站
  2. 网站三部分:____ 负责界面展示、____ 负责业务逻辑、____ 负责数据存储管理
  3. 前端网页由 (结构)、(样式)、____(行为)组成
  4. Python 中开发服务端可以用 或 ____
  5. FastAPI 是____、____、高性能的 Web 框架,基于 Python 的 ____ 提示构建 API
  6. API 接口就是对外提供的 ____,供别人调用
  7. FastAPI 四步:导入 → 创建 ____ 实例 → 创建 ____ 函数 → 运行服务
  8. 两个启动命令:fastapi ____ "main.py"uvicorn ____:app --reload
  9. uvicorn 是专门为 FastAPI/Starlette 设计的 ____ 服务器
填空答案(做完再点开)
  1. 万维网(World Wide Web)/ 浏览器 2. 前端程序 / 服务端程序 / 数据库 3. HTML / CSS / JavaScript 4. Django、Flask、FastAPI 5. 现代、快速 / 类型 6. 功能入口 7. FastAPI / 路径操作 8. dev / main 9. 高性能

二、裸写题#

  • 2-1 第一个接口 写一个 FastAPI 程序:/ 返回 {"message": "Hello World"}/users 返回 3 个用户的列表。

    提示(先自己想,实在想不出再点开)

    一级 · 思路:创建实例 → 用装饰器把函数”挂”到路径上 二级 · 方法app = FastAPI() / @app.get("/") 三级 · 骨架:函数返回字典或列表,FastAPI 会自动转成 JSON

  • 2-2 带路径参数的接口 再加一个 /users/{user_id} 接口:根据路径里的编号返回对应用户(编号不存在就返回提示)。

    提示

    一级 · 思路:路径里的花括号就是”路径参数”,要写进函数形参 二级 · 方法@app.get("/users/{user_id}") + def get_user(user_id: int): 三级 · 骨架user_id: int 会让 FastAPI 自动把字符串转成整数

  • 2-3 用测试客户端验证 不启动服务器,用 FastAPI 自带的 TestClient 直接请求两个接口,打印状态码和返回内容。

    提示

    一级 · 思路:像写单元测试一样调接口,不用真的开服务器 二级 · 方法from fastapi.testclient import TestClient / client = TestClient(app) 三级 · 骨架print(response.status_code, response.json())

参考答案(做完再点开)
from fastapi import FastAPI
from fastapi.testclient import TestClient
app = FastAPI(title="入门练习")
USERS = [
{"id": 1, "name": "张三"},
{"id": 2, "name": "李四"},
{"id": 3, "name": "王五"},
]
@app.get("/")
def root():
return {"message": "Hello World"}
@app.get("/users")
def get_users():
return USERS
@app.get("/users/{user_id}")
def get_user(user_id: int):
for user in USERS:
if user["id"] == user_id:
return user
return {"message": "用户不存在"}
# 2-3:不启动服务器也能测
if __name__ == "__main__":
client = TestClient(app)
for path in ["/", "/users", "/users/2", "/users/99"]:
resp = client.get(path)
print(path, resp.status_code, resp.json())
# 真正启动服务时用:
# fastapi dev main.py 或 uvicorn main:app --reload

评论区

[ 标签 ]
# AI37# AI 编程2# AI工具1# Ajax2# Apifox1# AstrBot3# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# Cloudflare2# CloudFlare2# CloudFlare-ImgBed3# coc3# CSS6# DeepSeek6# deepseek2# DELETE1# Docker1# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML6# HTTP5# ImageManager1# Java23# java13# JavaScript5# JDBC3# JSON2# JUnit1# LangChain25# Logback1# Maven6# Muse Spark1# Mybatis1# MyBatis4# MySQL28# MySql1# NapCat1# Node.js1# obsidian2# Obsidian5# OpenCode4# ORM1# PathVariable1# PicGo1# PyCharm1# Python65# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot11# SQL2# Streamlit5# Svelte2# TailwindCSS1# Telegram3# Tlias2# Vercel1# vscode2# Vue7# Waline3# WebDAV1# Web基础6# Web开发6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档10# 写作1# 函数2# 刷步数1# 前端32# 动态1# 动漫1# 包1# 单词2# 博客7# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 图床6# 地图1# 备份2# 大模型1# 奇思妙想1# 存储1# 学习方法6# 学校1# 宝塔面板3# 宝宝10# 对象1# 导航栏1# 工具2# 开发1# 开发工具1# 开发规范1# 开心1# 异常处理1# 影视2# 微信1# 性能优化2# 总结1# 想法15# 感受1# 感悟11# 指南1# 提示词工程1# 插件5# 故障排除1# 效率工具2# 教程10# 数据分析9# 数据库27# 数据结构1# 文件操作2# 斩神1# 日常92# 日志框架1# 朋友圈1# 朱元璋1# 模块1# 模板1# 正则表达式2# 测试1# 游戏2# 爬虫7# 生活迁移1# 电影2# 电脑1# 碎碎念1# 视觉识别1# 类1# 类型注解1# 网络基础2# 网络教室1# 羊毛2# 脚本2# 脚本工具1# 自动化2# 蓝奏云1# 订阅推荐2# 记录2# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载2# 运动1# 部落冲突1# 配置1# 随机图1# 面向对象5# 音乐3# 音标1# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]