设置 FastAPI 的开发环境(fastapi教程视频)
off999 2024-10-04 18:56 22 浏览 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 的自动交互式文档和类型检查使其成为小型项目和大型应用程序的绝佳选择。
相关推荐
- Python设计模式 第 13 章 中介者模式(Mediator Pattern)
-
在行为型模式中,中介者模式是解决“多对象间网状耦合”问题的核心模式。它就像“机场调度中心”——多个航班(对象)无需直接沟通起飞、降落时间,只需通过调度中心(中介者)协调,避免航班间的冲突与混乱...
- 1.3.1 python交互式模式的特点和用法
-
什么是Python交互模式Python交互模式,也叫Python交互式编程,是一种在Python解释器中运行的模式,它允许用户在解释器窗口中输入单个Python语句,并立即查看结果,而不需要编写整个程...
- Python设计模式 第 8 章 装饰器模式(Decorator Pattern)
-
在结构型模式中,装饰器模式是实现“动态功能扩展”的核心模式。它就像“手机壳与手机的关系”——手机(原始对象)具备通话、上网等基础功能,手机壳(装饰器)可在不改变手机本身的前提下,为其新增保护、...
- python设计模式 综合应用与实战指南
-
经过前面16章的学习,我们已系统掌握创建型模式(单例、工厂、建造者、原型)、结构型模式(适配器、桥接、组合、装饰器、外观、享元、代理)、行为型模式(责任链、命令、迭代器、中介者、观察者、状态、策略...
- Python入门学习教程:第 16 章 图形用户界面(GUI)编程
-
16.1什么是GUI编程?图形用户界面(GraphicalUserInterface,简称GUI)是指通过窗口、按钮、菜单、文本框等可视化元素与用户交互的界面。与命令行界面(CLI)相比,...
- Python 中 必须掌握的 20 个核心:str()
-
str()是Python中用于将对象转换为字符串表示的核心函数,它在字符串处理、输出格式化和对象序列化中扮演着关键角色。本文将全面解析str()函数的用法和特性。1.str()函数的基本用法1.1...
- Python偏函数实战:用functools.partial减少50%重复代码的技巧
-
你是不是经常遇到这样的场景:写代码时同一个函数调用了几十次,每次都要重复传递相同的参数?比如处理文件时总要用encoding='utf-8',调用API时固定传Content-Type...
- 第2节.变量和数据类型【第29课-输出总结】
-
同学们,关于输出的知识点讲解完成之后,把重点性的知识点做一个总结回顾。·首先对于输出这一章节讲解的比如有格式化符号,格式化符号这里需要同学们额外去多留意的是不是百分号s格式化输出字符串。当然课上也说百...
- AI最火语言python之json操作_python json.loads()
-
JSON(JavaScriptObjectNotation,JavaScript对象表示法)是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写。JSON是一种常用的数据格式,比如对接各种第...
- python中必须掌握的20个核心函数—split()详解
-
split()是Python字符串对象的方法,用于将字符串按照指定的分隔符拆分成列表。它是文本处理中最常用的函数之一。一、split()的基本用法1.1基本语法str.split(sep=None,...
- 实用方法分享:pdf文件分割方法 横向A3分割成纵向A4
-
今天在街上打印店给儿子打印试卷时,我在想:能不能,把它分割成A4在家中打印,这样就不需要跑到街上的打印店打印卷子了。原来,老师发的作业,是电子稿,pdf文件,A3格式的试卷。可是家中的打印机只能打印A...
- 20道常考Python面试题大总结_20道常考python面试题大总结免费
-
20道常考Python面试题大总结关于Python的面试经验一般来说,面试官会根据求职者在简历中填写的技术及相关细节来出面试题。一位拿了大厂技术岗SpecialOffer的网友分享了他总结的面试经...
- Kotlin Data Classes 快速上手_kotlin快速入门
-
引言在日常开发中,我们常常需要创建一些只用来保存数据的类。问题是,这样的类往往需要写一堆模板化的方法:equals()、hashCode()、toString()……每次都重复,既枯燥又容易出错。//...
- python自动化RobotFramework中Collections字典关键字使用(五)
-
前言介绍安装好robotframework库后,跟之前文章介绍的BuiltIn库一样BuiltIn库使用介绍,在“python安装目录\Lib\site-packages\robot\librarie...
- Python中numpy数据分析库知识点总结
-
Python中numpy数据分析库知识点总结二、对已读取数据的处理②指定一个值,并对该值双边进行修改③指定两个值,并对第一个值的左侧和第二个值的右侧进行修改2.4数组的拼接和行列交换①竖直拼接(np...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Python设计模式 第 13 章 中介者模式(Mediator Pattern)
- 1.3.1 python交互式模式的特点和用法
- Python设计模式 第 8 章 装饰器模式(Decorator Pattern)
- python设计模式 综合应用与实战指南
- Python入门学习教程:第 16 章 图形用户界面(GUI)编程
- Python 中 必须掌握的 20 个核心:str()
- Python偏函数实战:用functools.partial减少50%重复代码的技巧
- 第2节.变量和数据类型【第29课-输出总结】
- AI最火语言python之json操作_python json.loads()
- python中必须掌握的20个核心函数—split()详解
- 标签列表
-
- 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)