在Web开发领域,Python一直是深受开发者喜爱的语言。其中,很多人使用Python来搭建RESTful API,而FastAPI框架作为Python中的一枚新星,它有着很多优秀的特性,比如高性能、易于开发、易于测试等等。本文将从多个方面对FastAPI框架做详细的阐述,包括FastAPI框架的介绍、安装、基本使用、模型和数据库、WebSocket等等。
一、介绍
FastAPI是一个基于Python 3.6+的快速Web框架,它具有以下特点:
- 快速:使用FastAPI可以快速构建高性能的RESTful API。
- 易于开发:具有易于使用和易于编写的API设计,同时FastAPI还提供了很多代码生成的特性以方便开发。
- 快速学习:FastAPI框架有着清晰的文档和例子,使任何人都可以简单快速地学习和开始使用它。
- 标准化:FastAPI遵循市场上最好的实践,并充分利用现代Python3中的特性(如类型提示等)。
二、安装
在安装FastAPI之前,需要首先安装Python和pip工具。
1、在终端中输入以下内容进行安装:
pip install fastapi
2、安装完FastAPI后,可以输入以下内容来安装uvicorn(这是一个基于asgi的高性能Web服务器):
pip install uvicorn
三、基本使用
在安装完成之后,就可以利用FastAPI框架开始构建你的API了。下面是一个很基础的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}
上述代码中,我们先导入了FastAPI框架,然后创建了一个新的FastAPI实例(app)。不同于其他框架,在FastAPI中,每个路由操作都只是简单的Python函数。使用装饰器(如@app.get)来告诉FastAPI框架我们对API的请求方式(GET, POST等等)以及对应的URL路径(如/items/{item_id})。
对于我们的read_item函数,我们指定了两个参数:item_id和q,它们都是必填项和可选项。在FastAPI的API请求中,使用类型提示可以验证请求中的数据类型是否正确,并且可以根据默认值自动推断参数是否为必填项。
四、模型和数据库
在实际使用时,你需要保存很多不同的数据。在FastAPI框架中,我们可以使用pydantic模型来验证数据。下面是一个例子:
from typing import List
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.post("/items/")
async def create_item(item: Item):
return item
上述代码中,我们先导入相关的依赖,然后定义了一个Item模型类(是一个继承自BaseModel的Python类)。在Item类中,定义了三个属性:name(str类型)、price(float类型)和is_offer(bool类型)。其中,is_offer属性是可选的,默认为None。
我们接着定义了一个create_item函数,其中有一个参数item(即Item类型)。对于通过FastAPI框架使用的API请求,如果请求的数据不符合Item的定义,FastAPI框架将会向客户端返回400错误。在代码中,我们返回了刚刚收到的item值。
在实际使用中,我们需要将数据存储到数据库中。在FastAPI框架中,我们可以利用SQLAlchemy或ORM(对象关系映射)框架,以更加高效和安全的方式来管理数据和数据库。下面是一个例子:
from fastapi import FastAPI
from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Integer, String, Column
app = FastAPI()
SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
class Item(Base):
__tablename__ = "items"
id = Column(Integer, primary_key=True, index=True)
title = Column(String, index=True)
description = Column(String, index=True)
status = Column(String, index=True)
@app.post("/items/")
async def create_item(item: Item):
db_item = Item(title=item.title, description=item.description, status=item.status)
db = SessionLocal()
db.add(db_item)
db.commit()
db.refresh(db_item)
return db_item
上述代码中,我们引入了SQLAlchemy工具,定义了一个Item表并且创建了一个create_item函数。在这个函数中,我们创建了一个数据库环境,将Item插入到数据库中(在这里是postgreSQL)并返回这个item。在实际项目中,你可以根据自己需要的数据库类型来改变这里的数据库连接方法。
五、WebSocket
FastAPI框架同样支持服务器端和客户端WebSocket。下面是一个例子:
服务器端:
from fastapi import FastAPI, WebSocket
app = FastAPI()
class ConnectionManager:
def __init__(self):
self.active_connections = []
async def connect(self, websocket: WebSocket):
await websocket.accept()
self.active_connections.append(websocket)
def disconnect(self, websocket: WebSocket):
self.active_connections.remove(websocket)
async def broadcast(self, data: str):
for connection in self.active_connections:
await connection.send_text(data)
manager = ConnectionManager()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await manager.connect(websocket)
try:
while True:
data = await websocket.receive_text()
await manager.broadcast(f"Client says: {data}")
except WebSocketDisconnect:
manager.disconnect(websocket)
await manager.broadcast(f"Client left!")
客户端:
from fastapi import FastAPI
import websocket
app = FastAPI()
@app.get("/ws/")
async def websocket():
ws = websocket.create_connection("ws://localhost:8000/ws/")
ws.send("Hello, Server")
result = ws.recv()
return {"Result: ": result}
上述代码中,我们定义了一个WebSocket服务器端和客户端,其中WebSocket连接管理器类ConnectionManager维护了所有活动连接的列表。在服务器端代码中,我们定义了一个WebSocket连接点,客户端代码中我们定义了一个客户端API,使用websocket库向服务器端建立WebSocket连接并发送消息。
六、结语
通过本文对FastAPI框架的深入讲解,相信大家已经对FastAPI的基本使用和更多高级特性有了更深层次的了解。FastAPI凭借其高性能、易于开发的优点,很快成为了Python Web开发的热门选择之一。希望本文可以帮助您更好地了解和使用它。