{"id":34704664,"url":"https://github.com/ydf0509/nb_api","last_synced_at":"2026-05-27T05:36:03.773Z","repository":{"id":320355633,"uuid":"1080909100","full_name":"ydf0509/nb_api","owner":"ydf0509","description":"fastapi crud router","archived":false,"fork":false,"pushed_at":"2025-10-24T10:17:42.000Z","size":148,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-26T11:12:43.995Z","etag":null,"topics":["curd-api","fastapi","fastapi-crud","fastapi-sqlalchemy","fastapi-sqlmodel","sqlmodel","tortoise-orm"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ydf0509.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-22T03:21:44.000Z","updated_at":"2025-11-12T06:49:18.000Z","dependencies_parsed_at":"2025-10-23T11:38:33.511Z","dependency_job_id":null,"html_url":"https://github.com/ydf0509/nb_api","commit_stats":null,"previous_names":["ydf0509/nb_api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ydf0509/nb_api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ydf0509%2Fnb_api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ydf0509%2Fnb_api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ydf0509%2Fnb_api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ydf0509%2Fnb_api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ydf0509","download_url":"https://codeload.github.com/ydf0509/nb_api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ydf0509%2Fnb_api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33553127,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["curd-api","fastapi","fastapi-crud","fastapi-sqlalchemy","fastapi-sqlmodel","sqlmodel","tortoise-orm"],"created_at":"2025-12-24T23:14:04.900Z","updated_at":"2026-05-27T05:36:03.764Z","avatar_url":"https://github.com/ydf0509.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nb_api\n\n\u003cp align=\"center\"\u003e\n  \u003c!-- 你可以在这里放一个酷炫的 Logo --\u003e\n  \u003c!-- \u003cimg src=\"path/to/your/logo.png\" height=\"200\" /\u003e --\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cem\u003e⚡️ 为你的数据模型闪电般地生成 CRUD API ⚡️\u003c/em\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003c!-- 在这里可以添加一些徽章，比如 PyPI 版本、构建状态等 --\u003e\n  \u003cimg alt=\"PyPI - Python Version\" src=\"https://img.shields.io/pypi/pyversions/nb_api\"\u003e\n  \u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/ydf0509/nb_api\"\u003e\n\u003c/p\u003e\n\n---\n\n## 🚀 `nb_api` 是什么？\n\n`nb_api` 是一个为现代 FastAPI 应用量身打造的 **CRUD 路由自动生成框架**。你只需定义好你的数据模型，`nb_api` 就能为你自动创建一整套完整、健壮且文档齐全的增、删、改、查（CRUD）API 接口。\n\n`nb_api` 旨在解决为 FastAPI 应用重复编写 CRUD 接口的痛点。它支持多种数据存储后端，提供了更强大、更现代化的功能。\n\n## ✨ 核心优势\n\n- **多数据库支持**: 支持 **SQLModel**、**SQLAlchemy**、**Tortoise ORM** 和 **内存存储**，满足不同场景需求\n- **现代化技术栈**: 完全基于 **FastAPI** + **Pydantic v2** 构建，享受最新的性能优化和最完善的类型提示\n- **高度自动化**: 告别重复编写 CRUD 样板代码，让你专注于核心业务逻辑\n- **强大的搜索能力**: 内置\"超级搜索\"接口，允许前端通过 JSON 动态构建复杂的过滤和排序查询\n- **规范的 API 设计**: 所有响应都封装在统一的 `ResponseModel` 中，无论是成功还是失败，都有一致的结构，极大简化了前端处理\n- **生产级特性**: 开箱即用的分页、依赖注入、慢请求日志记录等功能，让你的应用兼具开发效率和生产环境下的可观测性\n- **灵活可扩展**: 轻松禁用、覆盖默认路由，或添加自定义路由，满足你的所有特殊需求\n\n## 🛠️ 安装\n\n```bash\npip install very_nb_api fastapi sqlmodel uvicorn\n```\n\n**注意安装和实际导入不同,因为提示nb_api这个名字和pypi已存在的包相似冲突了**\n#### 安装\n```\npip install very_nb_api\n```\n\n#### 导入\n```\nimport nb_api\n```\n\n## 快速开始\n\n### SQLModel 版本\n\n在短短十几行代码内，即可拥有一个功能完备的 CRUD API。\n\n```python\n# main.py\nfrom typing import Optional\nfrom sqlmodel import Field, Session, SQLModel, create_engine\nfrom fastapi import FastAPI\nfrom nb_api import SQLModelCRUDRouter\n\n# 1. 定义 SQLModel 模型\nclass Book(SQLModel, table=True):\n    id: Optional[int] = Field(default=None, primary_key=True)\n    title: str\n    author: str\n\n# 2. 设置数据库\nengine = create_engine(\"sqlite:///database.db\")\n\ndef get_session():\n    with Session(engine) as session:\n        yield session\n\n# 3. 创建 FastAPI 应用和 nb_api 路由\napp = FastAPI()\n\n@app.on_event(\"startup\")\ndef on_startup():\n    SQLModel.metadata.create_all(engine)\n\n# 核心用法！\napp.include_router(\n    SQLModelCRUDRouter(schema=Book, db_model=Book, db_session=get_session)\n)\n```\n\n### 异步 SQLModel 版本\n\n```python\n# main.py\nfrom typing import Optional, AsyncGenerator\nfrom sqlmodel import Field, SQLModel\nfrom sqlalchemy.ext.asyncio import create_async_engine\nfrom sqlmodel.ext.asyncio.session import AsyncSession\nfrom fastapi import FastAPI\nfrom nb_api import AioSQLModelCRUDRouter\n\n# 1. 定义 SQLModel 模型\nclass Book(SQLModel, table=True):\n    id: Optional[int] = Field(default=None, primary_key=True)\n    title: str\n    author: str\n\n# 2. 设置异步数据库\nDATABASE_URL = \"sqlite+aiosqlite:///database.db\"\nengine = create_async_engine(DATABASE_URL)\n\nasync def get_session() -\u003e AsyncGenerator[AsyncSession, None]:\n    async with AsyncSession(engine) as session:\n        yield session\n\n# 3. 创建 FastAPI 应用和 nb_api 路由\napp = FastAPI()\n\n# 核心用法！\napp.include_router(\n    AioSQLModelCRUDRouter(schema=Book, db_model=Book, db=get_session)\n)\n```\n\n### Tortoise ORM 版本\n\n```python\n# main.py\nfrom typing import Optional\nfrom tortoise.models import Model\nfrom tortoise import fields\nfrom tortoise.contrib.fastapi import register_tortoise\nfrom fastapi import FastAPI\nfrom pydantic import BaseModel\nfrom nb_api import TortoiseCRUDRouter\n\n# 1. 定义 Tortoise ORM 模型\nclass Book(Model):\n    id = fields.IntField(pk=True)\n    title = fields.CharField(max_length=100)\n    author = fields.CharField(max_length=100)\n\n# 2. 定义 Pydantic 模型\nclass BookSchema(BaseModel):\n    id: int\n    title: str\n    author: str\n\n    class Config:\n        from_attributes = True\n\n# 3. 创建 FastAPI 应用\napp = FastAPI()\n\n# 4. 注册 Tortoise ORM\nregister_tortoise(\n    app,\n    db_url=\"sqlite://db.sqlite3\",\n    modules={\"models\": [\"__main__\"]},\n    generate_schemas=True,\n    add_exception_handlers=True\n)\n\n# 核心用法！\napp.include_router(\n    TortoiseCRUDRouter(schema=BookSchema, db_model=Book, prefix=\"books\")\n)\n```\n\n### 内存版本（无需数据库）\n\n```python\n# main.py\nfrom typing import Optional\nfrom pydantic import BaseModel\nfrom fastapi import FastAPI\nfrom nb_api import MemoryCRUDRouter\n\n# 1. 定义 Pydantic 模型\nclass Book(BaseModel):\n    id: Optional[int] = None\n    title: str\n    author: str\n\n# 2. 创建 FastAPI 应用\napp = FastAPI()\n\n# 核心用法！\napp.include_router(\n    MemoryCRUDRouter(schema=Book, prefix=\"books\")\n)\n```\n\n启动应用 `uvicorn main:app --reload`，然后访问 `http://127.0.0.1:8000/docs`，你将看到 `nb_api` 为 `Book` 模型自动生成的所有接口！\n\n## 🌟 功能展示\n\n### 1. 自动生成的 CRUD 路由\n\n| 路由 | 方法 | 描述 |\n|---|---|---|\n| `/book` | `GET` | 获取所有书籍 (支持分页) |\n| `/book` | `POST` | 创建一本新书 |\n| `/book` | `DELETE` | 删除所有书籍 |\n| `/book/{item_id}` | `GET` | 获取指定 ID 的书籍 |\n| `/book/{item_id}` | `PUT` | 更新指定 ID 的书籍 |\n| `/book/{item_id}` | `DELETE` | 删除指定 ID 的书籍 |\n| `/book/search` | `POST` | **超级搜索接口** |\n\n### 2. 超级搜索接口 (`/search`)\n\n这是 `nb_api` 的独有功能！通过一个 `POST` 请求，实现复杂的动态查询。\n\n**请求**: `POST /book/search`\n**请求体**:\n```json\n{\n  \"filters\": [\n    { \"field\": \"author\", \"operator\": \"contains\", \"value\": \"Tolkien\" },\n    { \"field\": \"id\", \"operator\": \"in\", \"value\": [1, 3, 5] }\n  ],\n  \"sorting\": [\n    { \"field\": \"title\", \"direction\": \"asc\" }\n  ]\n}\n```\n\n### 3. 统一的 API 响应\n\n**成功响应**:\n```json\n{\n  \"status_code\": 0,\n  \"msg\": \"success\",\n  \"data\": { \"id\": 1, \"title\": \"The Hobbit\", \"author\": \"J.R.R. Tolkien\" }\n}\n```\n\n**错误响应**:\n```json\n{\n  \"status_code\": 404,\n  \"msg\": \"Item not found\"\n}\n```\n\n### 4. 路由定制与扩展\n\n`nb_api` 提供了丰富的初始化参数来定制路由行为。\n\n```python\nfrom fastapi import Depends\n\nrouter = SQLModelCRUDRouter(\n    schema=Book,\n    db_model=Book,\n    db_session=get_session,\n    \n    # --- 功能配置 ---\n    paginate=50,                  # 设置分页最大数量\n\n    \n    # --- 路由控制 ---\n    prefix=\"my-books\",            # 自定义路由前缀\n    tags=[\"图书管理\"],            # 自定义 OpenAPI 标签\n    delete_all_route=False,       # 禁用\"删除所有\"路由\n    \n    # --- 依赖注入 (权限控制) ---\n    update_route=[Depends(require_admin_user)],\n    create_route=[Depends(require_login)]\n)\n```\n\n你也可以像使用普通的 `APIRouter` 一样，轻松地覆盖或添加新路由。\n\n```python\n# 覆盖默认的 get_one 路由\n@router.get(\"/{item_id}\")\ndef custom_get_one(item_id: int):\n    return {\"message\": f\"You are viewing book {item_id} with a custom route!\"}\n\n# 添加一个全新的路由\n@router.post(\"/{item_id}/publish\")\ndef publish_book(item_id: int):\n    # ... 发布逻辑 ...\n    return {\"message\": \"Book published!\"}\n```\n\n\n### 5 一个接口没写,下面都是nb_api自动生成的接口\n\n接口文档截图:\n[![pVXA2ZD.png](https://s21.ax1x.com/2025/10/23/pVXA2ZD.png)](https://imgchr.com/i/pVXA2ZD)\n\n这些接口都是nb_api自动生成的,你只需要定义好你的数据模型,nb_api就会自动生成这些接口,全部都不是人工手写def 的 fastapi 接口\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fydf0509%2Fnb_api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fydf0509%2Fnb_api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fydf0509%2Fnb_api/lists"}