# 完整FastAPI示例:博客API
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Optional
from tortoise import fields
from tortoise.contrib.fastapi import register_tortoise
from tortoise.models import Model
app = FastAPI(title="Blog API")
# Pydantic模型
class PostCreate(BaseModel):
title: str
content: str
class PostRead(PostCreate):
id: int
# Tortoise-ORM模型
class Post(Model):
id = fields.IntField(pk=True)
title = fields.CharField(max_length=100)
content = fields.TextField()
def to_pydantic(self):
return PostRead(
id=self.id,
title=self.title,
content=self.content
)
# API路由
@app.get("/posts", response_model=List[PostRead])
async def get_posts():
posts = await Post.all()
return [post.to_pydantic() for post in posts]
@app.post("/posts", response_model=PostRead)
async def create_post(post: PostCreate):
post_obj = await Post.create(**post.dict())
return post_obj.to_pydantic()
# 数据库配置
register_tortoise(
app,
db_url="sqlite://db.sqlite3",
modules={"models": ["__main__"]},
generate_schemas=True,
add_exception_handlers=True,
)