FastAPI Server
创建项目目录:lr_fulltext_search_py
。
创建虚拟环境
使用虚拟环境来隔离项目依赖项是一种最佳实践。你可以使用 Python 3 内置的 venv
模块创建虚拟环境。
python3 -m venv lrFastAPIEnv
警告:
如果你使用 git 或其他版本管理系统,记得要忽略虚拟目录。 比如,.gitignore
:+ +lrFastAPIEnv/
激活虚拟环境
此步骤各平台操作不同。
在 Windows 平台:
lrFastAPIEnv\Scripts\activate
在 macOS 和 Linux 平台:
source lrFastAPIEnv/bin/activate
管理依赖
在项目根目录创建名为 requirements.txt
的文件。该文件用于列出项目的依赖项及其具体版本。你可以使用如下命令自动生成文件:
pip3 freeze > requirements.txt
如果你的虚拟环境设置正确的话,你将会得到一个空文件 requirements.txt
。
安装
安装 FastAPI
框架:
pip3 install fastapi
你还需要安装一个 ASGI server,比如Uvicorn 或者 Hypercorn。
pip3 install "uvicorn[standard]"
安装后,更新 requirements.txt
:
pip3 freeze > requirements.txt
此命令更新 requirements.txt
文件。其内容大致如下所示:
annotated-types==0.6.0
anyio==4.3.0
certifi==2024.2.2
click==8.1.7
elastic-transport==8.13.0
elasticsearch==8.13.0
fastapi==0.110.2
h11==0.14.0
httptools==0.6.1
idna==3.7
pydantic==2.7.0
pydantic_core==2.18.1
python-dotenv==1.0.1
PyYAML==6.0.1
sniffio==1.3.1
starlette==0.37.2
typing_extensions==4.11.0
urllib3==2.2.1
uvicorn==0.29.0
uvloop==0.19.0
watchfiles==0.21.0
websockets==12.0
创建 main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def welcome():
return {"status": "ok"}
如下运行程序:
uvicorn main:app --reload
命令 uvicorn main:app
含义:
main
: 文件main.py
(Python “模块”)。app
: 在main.py
中创建的对象名,比如:app = FastAPI()
。--reload
: 使得 server 在代码更新后自动重启。只适合开发环境下使用。
将得到类似如下信息:
INFO: Will watch for changes in these directories: ['.../projects/lr_fulltext_search_py']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [37917] using watchgod
INFO: Started server process [37919]
INFO: Waiting for application startup.
INFO: Application startup complete.
你的 API 服务器已经在 8000 端口跑起来了。
尝试使用 curl
命令测试 http://localhost:8000/ URL。它应该展示如下 json:
{
"status": "ok"
}
数据模型:Book
数据模型表示 API 处理的数据的结构。
创建 domain/model/book.py:
形如
domain/model/...
目录结构的项目都是在使用4层架构,详情可阅读这里。
from dataclasses import dataclass
@dataclass
class Book:
title: str
author: str
published_at: str
content: str