设置 FastAPI 的开发环境(fastapi教程视频)
off999 2024-10-04 18:56 18 浏览 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:8000
4. 测试应用程序:
打开浏览器并导航到 `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 的自动交互式文档和类型检查使其成为小型项目和大型应用程序的绝佳选择。
相关推荐
- SPC相关的计算用excel和python实现【源码下载】
-
做SPC分析涉及到很多计算,比如CPK、PPK、概率图、PPM等等,网上很多公式,但具体实现却不是那么容易的。我们整理了这些用excel和python实现的代码。包括但不限于以下的内容:SPC分析中的...
- Python学不会来打我(34)python函数爬取百度图片_附源码
-
随着人工智能和大数据的发展,图像数据的获取变得越来越重要。作为Python初学者,掌握如何从网页中抓取图片并保存到本地是一项非常实用的技能。本文将手把手教你使用Python函数编写一个简单的百度图片...
- django python数据中心、客户、机柜、设备资源管理平台源码分享
-
先转发后关注,私信“资源”即可免费获取源码下载链接!本项目一个开源的倾向于数据中心运营商而开发的,拥有数据中心、客户、机柜、设备、跳线、物品、测试、文档等一些列模块的资源管理平台,解决各类资源集中管理...
- 熬夜也值得学习练手的108个Python项目(附源码),太实用了!
-
现在学编程的人越来越多,Python因为简单好上手、功能又强大,成了很多人的首选。不管是做数据分析、人工智能,还是写网络程序、自动化脚本,Python都能派上用场。而且它诞生的时间比网页还早,作为...
- 这五个办公室常用自动化工具python源码,复制代码就能用
-
办公室自动化现在能看这文章的恐怕大部分都是办公室久坐工作者,很多都有腰肌劳损、肩周炎等职业病,难道就不能有个工具缓解一下工作量吗?那么恭喜你点进了这篇文章,这篇文章将使用python直接实现五个常...
- 将python源代码封装成window可执行程序教程
-
将python源代码封装成window可执行程序教程点击键盘win+r打开运行框在运行框中输入cmd,进入到命令行。在命令行中输入piplist去查看当前电脑中所有的库检查是否有pyinstall...
- Python 爬虫如何爬取网页源码?(爬虫获取网页源代码)
-
下面教大家用几行代码轻松爬取百度首页源码。什么是urllib?urllib库是Python内置的HTTP请求库,它可以看做是处理URL的组件集合。urllib库包含了四大模块,具体如下:urllib....
- Python RPC 之 Thrift(python是做什么的)
-
thrift-0.12.0python3.4.3Thrift简介:Thrift是一款高性能、开源的RPC框架,产自Facebook后贡献给了Apache,Thrift囊括了整个RP...
- 用Python编写FPGA以太网MAC(附源码下载方式)
-
来源:EETOP作者:ccpp123略作了解后发现,MyHDL不是高层次综合,它实际上是用Python的一些功能实现了一个Verilog仿真器,能对用Python写的仿Verilog语言进行仿...
- python爬虫常用工具库总结(python爬虫工具下载)
-
说起爬虫,大家可能第一时间想到的是python,今天就简单为大家介绍下pyhton常用的一些库。请求库:实现基础Http操作urllib:python内置基本库,实现了一系列用于操作url的功能。...
- 手把手教你使用scrapy框架来爬取北京新发地价格行情(理论篇)
-
来源:Python爬虫与数据挖掘作者:霖hero大家好!我是霖hero。上个月的时候,我写了一篇关于IP代理的文章,手把手教你使用XPath爬取免费代理IP,今天在这里分享我的第二篇文章,希望大家可以...
- 2025年Python爬虫学习路线:第1阶段 爬虫基础入门开始
-
这个阶段的目标是让你熟悉Python的基础知识、了解HTTP请求和HTML是如何工作的,并最终完成你的第一个爬虫小项目——抓取名言!按照计划,我们首先要打好Python基础。Python就像是我们要...
- 如何入门 Python 爬虫?(python零基础爬虫)
-
1.很多人一上来就要爬虫,其实没有弄明白要用爬虫做什么,最后学完了却用不上。大多数人其实是不需要去学习爬虫的,因为工作所在的公司里有自己的数据库,里面就有数据来帮助你完成业务分析。什么时候要用到爬虫呢...
- 突破爬虫瓶颈:Python爬虫核心能力提升与案例实操
-
技术控必看!Python爬虫高手进阶全攻略,解锁数据处理高阶玩法在数字化时代,Python爬虫早已成为数据探索者手中的得力工具。从基础的网页抓取到复杂的数据处理,每一次技术升级都能带来新的突破。本文将...
- 网络爬虫开源框架(网络爬虫的框架)
-
目前开源爬虫下载框架是百花齐放,各个编程语言都有,以下主要介绍其中重要的几个:1)python:scrapy,pyspider,gcrawler2)Java:webmagic,WebCollector...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- SPC相关的计算用excel和python实现【源码下载】
- Python学不会来打我(34)python函数爬取百度图片_附源码
- django python数据中心、客户、机柜、设备资源管理平台源码分享
- 熬夜也值得学习练手的108个Python项目(附源码),太实用了!
- 这五个办公室常用自动化工具python源码,复制代码就能用
- 将python源代码封装成window可执行程序教程
- Python 爬虫如何爬取网页源码?(爬虫获取网页源代码)
- Python RPC 之 Thrift(python是做什么的)
- 用Python编写FPGA以太网MAC(附源码下载方式)
- python爬虫常用工具库总结(python爬虫工具下载)
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python自定义函数 (53)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python字典增加键值对 (53)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python人脸识别 (54)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)