设置 FastAPI 的开发环境(fastapi教程视频)
off999 2024-10-04 18:56 37 浏览 0 评论
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于基于标准 Python 类型提示使用 Python 3.7+ 构建 API。它易于使用,并允许使用最少的代码创建强大的 API。在这篇博文中,我们将介绍如何为 FastAPI 设置开发环境,包括安装依赖项、设置虚拟环境、创建基本的 FastAPI 应用程序以及运行服务器。
先决条件
在开始之前,请确保您的计算机上安装了以下内容:
- Python 3.7 或更高版本
- pip(Python 包安装程序)
- IDE 或文本编辑器(例如 VS Code、PyCharm、Sublime Text)
步骤 1:安装 Python
如果您尚未安装Python,可以从官方 Python 网站(https://www.python.org/downloads/) 下载。按照您的操作系统的说明安装 Python。
第 2 步:设置虚拟环境
使用虚拟环境有助于将项目依赖项与全局 Python 环境隔离开来,从而更易于管理并避免冲突。
1. 创建虚拟环境:
python -m venv fastapi-env
此命令将创建一个名为 `fastapi-env` 的目录,其中包含一个新的 Python 环境。
2. 激活虚拟环境:
- 在 Windows 上:
.\fastapi-env\Scripts\activate
- 在 macOS 和 Linux 上:
source fastapi-env/bin/activate
激活后,您应该在命令提示符中看到虚拟环境的名称。
第 3 步:安装 FastAPI 和 Uvicorn
FastAPI 是主包,Uvicorn 是用于为 FastAPI 应用程序提供服务的 ASGI 服务器。
pip install fastapi uvicorn
步骤 4:创建一个基本的 FastAPI 应用程序
让我们创建一个简单的 FastAPI 应用程序来验证我们的环境是否设置正确。
1. 为您的项目创建一个新目录:
mkdir fastapi-demo
cd fastapi-demo
2. 创建一个 main.py 文件:
touch main.py
3. 编辑 `main.py` 并添加以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}此代码创建一个具有两个端点的 FastAPI 应用程序:一个位于根目录(“/”),返回“Hello, World”消息,另一个位于“/items/{item_id}” 返回项目 ID 和可选查询参数。
第 5 步:运行 FastAPI 服务器
要运行 FastAPI 应用程序,请使用 Uvicorn:
uvicorn main:app --reload
- `main` 表示文件名 (`main.py`)。
- `app` 表示 FastAPI 实例。
- `--reload` 启用自动重新加载,这在开发过程中很有用,因为它会在检测到代码更改时重新加载服务器。
运行此命令后,您应该看到表明服务器正在运行的输出:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [12345] using statreload
INFO: Started server process [12346]
INFO: Waiting for application startup.
INFO: Application startup complete.
使用其他 ASGI 服务器设置 FastAPI 的开发环境
除了 Uvicorn,FastAPI 还可以由其他 ASGI 服务器(如 Daphne 和 Hypercorn)提供服务。以下是使用这些 ASGI 服务器设置 FastAPI 的演示。
1):使用 Daphne
Daphne 是用于 ASGI 和 ASGI-HTTP 的 HTTP、HTTP2 和 WebSocket 协议服务器,是作为 Django Channels 项目的一部分开发的。
1. 安装 Daphne:
pip install daphne
2. 创建 FastAPI 应用程序:
确保您在 `main.py` 中拥有基本的 FastAPI 应用程序。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}3. 使用 Daphne 运行应用程序:
daphne -p 8000 main:app
输出:
2021-08-25 20:30:47,128 INFO Starting server at tcp:port=8000:interface=127.0.0.1
2021-08-25 20:30:47,129 INFO HTTP/2 support enabled
2021-08-25 20:30:47,129 INFO Configuring endpoint tcp:port=8000:interface=127.0.0.1
2021-08-25 20:30:47,130 INFO Listening on TCP address 127.0.0.1:80004. 测试应用程序:
打开浏览器并导航到 `http://127.0.0.1:8000`。您应该会看到 JSON 响应:
{
"Hello": "World"
}
2):使用 Hypercorn
Hypercorn 是一个支持 HTTP/1、HTTP/2 和 HTTP/3 的 ASGI 和 WSGI 服务器。
1. 安装 Hypercorn:
pip install hypercorn
2. 创建 FastAPI 应用程序:
确保在 `main.py` 中拥有基本的 FastAPI 应用程序。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}3. 使用 Hypercorn 运行应用程序:
hypercorn main:app --reload
输出:
[2021-08-25 20:30:47 +0000] [21759] [INFO] Listening at: http://127.0.0.1:8000 (21759)
[2021-08-25 20:30:47 +0000] [21759] [INFO] Using worker: sync
[2021-08-25 20:30:47 +0000] [21761] [INFO] Booting worker with pid: 21761
4. 测试应用程序:
打开浏览器并导航到 `http://127.0.0.1:8000`。您应该会看到 JSON 响应:
{
"Hello": "World"
}3):使用 daphne 和 Hypercorn 实现后台任务和 WebSocket 支持
1. 扩展 FastAPI 应用程序以使用后台任务和 WebSocket:
from fastapi import FastAPI, BackgroundTasks, WebSocket
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
def write_log(message: str):
with open("log.txt", "a") as log_file:
log_file.write(message + "\n")
@app.post("/send-notification/{email}")
async def send_notification(email: str, background_tasks: BackgroundTasks):
background_tasks.add_task(write_log, f"Notification sent to {email}")
return {"message": "Notification sent"}
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"Message text was: {data}")
2. 使用 Daphne 运行应用程序:
daphne -p 8000 main:app
3. 使用 Hypercorn 运行应用程序:
hypercorn main:app --reload
4. 测试 WebSocket 端点:
使用 WebSocket 客户端(例如 [WebSocket King](https://websocketking.com/))连接到 `ws://127.0.0.1:8000/ws` 并发送消息。您应该会收到来自服务器的回显消息。
5. 测试后台任务:
运行 FastAPI 服务器并向 `/send-notification/test@example.com` 发出 POST 请求。检查 `log.txt` 文件中的日志条目。
http POST http://127.0.0.1:8000/send-notification/test@example.com
响应:
{
"message": "Notification sent"
}
`log.txt` 文件应包含:
Notification sent to test@example.com
这些演示展示了如何使用其他 ASGI 服务器(如 Daphne 和 Hypercorn)设置 FastAPI。通过利用这些服务器的功能,您可以构建具有 WebSocket 支持、后台任务等的高性能 API,言归正传,让我们继续。
第 6 步:测试应用程序
打开浏览器并导航到 `http://127.0.0.1:8000`。您应该会看到 JSON 响应:
{
"Hello": "World"
}
您还可以访问 FastAPI 提供的交互式 API 文档:
- Swagger UI:`http://127.0.0.1:8000/docs`
- ReDoc:`http://127.0.0.1:8000/redoc`
其他步骤
对于更高级的开发,请考虑以下步骤(当然,小编会在后期的博文中为大家一一展开):
1. 使用环境变量:将敏感信息(如 API 密钥和数据库凭据)存储在环境变量中。
2. 设置数据库:FastAPI 可与 SQLAlchemy(用于 SQL 数据库)或 Tortoise-ORM(用于异步 ORM)配合使用。
3. 创建 Docker 环境:使用 Docker 容器化您的 FastAPI 应用程序,以便于部署和扩展。
示例 Docker 设置
在您的项目目录中创建一个 `Dockerfile`:
# Use an official Python runtime as a parent image
FROM python:3.8-slim
# Set the working directory in the container
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app
# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Run app.py when the container launches
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
创建一个包含必要依赖项的 `requirements.txt` 文件:
fastapi
uvicorn
构建并运行 Docker 容器:
docker build -t fastapi-demo .
docker run -p 80:80 fastapi-demo
为 FastAPI 设置开发环境很简单。按照本博文中概述的步骤,您可以快速开始使用 FastAPI 并开始构建高性能 Web API。FastAPI 的自动交互式文档和类型检查使其成为小型项目和大型应用程序的绝佳选择。
相关推荐
- 安全教育登录入口平台(安全教育登录入口平台官网)
-
122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...
- 大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)
-
大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...
-
- 哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
-
要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...
-
2026-02-04 09:03 off999
- 电信宽带测速官网入口(电信宽带测速官网入口app)
-
这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...
- 植物大战僵尸95版手机下载(植物大战僵尸95 版下载)
-
1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...
- 免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)
-
1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...
- 2025世界杯赛程表(2025世界杯在哪个国家)
-
2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...
- 下载搜狐视频电视剧(搜狐电视剧下载安装)
-
搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...
- 永久免费听歌网站(丫丫音乐网)
-
可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...
- 音乐格式转换mp3软件(音乐格式转换器免费版)
-
有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...
- 电子书txt下载(免费的最全的小说阅读器)
-
1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...
- 最好免费观看高清电影(播放免费的最好看的电影)
-
在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...
- 孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)
-
要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
win7系统还原步骤图解(win7还原电脑系统的步骤)
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
16949认证费用是多少(16949审核员太难考了)
-
linux软件(linux软件图标)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
windows7旗舰版多少钱(win7旗舰版要多少钱)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
