240108_FastAPI

Haoliang Tang Lv3

竞品: django-ninja

安装

1
2
pip install fastapi
pip install "uvicorn[standard]"

本机非py虚拟环境的话可以pacman安装

1
2
sudo pacman -S python-fastapi
sudo pacman -S uvicorn

shell能识别uvicorn就ok,pip list也都有了。

使用

就对着官方文档做,真的很方便build出API。

以后测前端axios请求发得对不对,就用FastAPI硬编码死数据,一个main.py里就搞定,很便捷!

还可以异步,稍微等两秒再返回response

1
2
3
4
5
6
7
import asyncio
arxiv_api = FastAPI()
@arxiv_api.get("/docs1")
async def read_paper():
# 模拟2秒延迟
await asyncio.sleep(2)
return paper_data # paper_data可以硬编码数据

ちなみに、修饰器定义endpoint地址时别用/docs,这个算作保留地址用来自动生成前后端接口文档的

然后要注意CORS

1
2
3
4
5
6
7
8
9
10
11
12
from fastapi.middleware.cors import CORSMiddleware

xxx_api = FastAPI()

# 允许所有来源的跨域请求
xxx_api.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 此处可以指定允许的具体来源,也可以使用通配符 "*" 允许所有来源
allow_credentials=True,
allow_methods=["*"], # 允许所有 HTTP 方法
allow_headers=["*"], # 允许所有 HTTP 头部
)

注意和Django Ninja的違い:

  1. Django Ninja定义处理API endpoint的函数时记得需要一个request参数

FastAPI定义处理api endpoint的函数直接path para, query para, request body並べる就行了

1
2
3
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}

但django-ninja定义处理api endpoint的函数需要前面再加一个request参数

1
2
3
@api.get("/add")
def add(request, a: int, b: int):
return {"result": a + b}
  1. 基于OpenAPI自动生成的文档地址:
  • FastAPI: http://127.0.0.1:8000/docs

  • django-ninja: http://127.0.0.1:8000/xxx/docs

    其中xxx取决于当该app模块在项目中的相对url路径, urls.py里path("xxx/", app.urls)

参考

官网:https://fastapi.tiangolo.com/

【Fast API 入門】PythonでWeb APIを作ってみよう!簡単にAPIが作れるフレームワークの紹介

  • Title: 240108_FastAPI
  • Author: Haoliang Tang
  • Created at : 2024-01-08 00:00:00
  • Updated at : 2025-04-29 23:23:37
  • Link: https://hl-tang.github.io/2024/01/08/240108_FastAPI/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
240108_FastAPI