# fastapi_tortoise_blog **Repository Path**: windstarry/fastapi_tortoise_blog ## Basic Information - **Project Name**: fastapi_tortoise_blog - **Description**: 使用Fastapi和tortoise构建的个人博客 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2023-05-04 - **Last Updated**: 2024-12-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # readme文档 使用[fastapi](https://fastapi.tiangolo.com/),[tortoise-orm](https://tortoise-orm.readthedocs.io/en/latest/),[aerich](https://github.com/tortoise/aerich), [mysql](https://www.mysql.com/),[loguru](https://github.com/Delgan/loguru)和[jinja2](https://jinja.palletsprojects.com/en/3.0.x/)搭建的bolg系统。 ## 程序结构 ``` fastapi_tortoise_blog ├─ app │ ├─ config │ │ ├─ config.py │ │ ├─ logging.dev.json │ │ ├─ logging.prod.json │ │ └─ __init__.py │ ├─ events │ │ ├─ shutdown.py │ │ ├─ startup.py │ │ └─ __init__.py │ ├─ exceptions │ │ ├─ exc.py │ │ ├─ handlers.py │ │ └─ __init__.py │ ├─ main.py │ ├─ models │ │ ├─ base.py │ │ ├─ posts.py │ │ ├─ relation.py │ │ ├─ tags.py │ │ └─ __init__.py │ ├─ routers │ │ ├─ docs.py │ │ ├─ posts.py │ │ ├─ tags.py │ │ └─ __init__.py │ ├─ schemas │ │ ├─ base.py │ │ ├─ paginator.py │ │ ├─ posts.py │ │ ├─ tags.py │ │ └─ __init__.py │ ├─ templates │ │ ├─ about.html │ │ ├─ base.html │ │ ├─ contact.html │ │ ├─ home.html │ │ ├─ login.html │ │ ├─ post.html │ │ ├─ posts.html │ │ ├─ post_preview.html │ │ ├─ tag.html │ │ ├─ tags.html │ │ └─ tag_posts.html │ ├─ utils │ │ ├─ dbhelp.py │ │ ├─ loguru_handler.py │ │ ├─ security.py │ │ └─ __init__.py │ └─ views │ ├─ home.py │ └─ __init__.py ├─ media │ └─ .gitkeep ├─ pyproject.toml ├─ readme.md ├─ requirements.txt ├─ server.py └─ static ├─ css │ ├─ all.min.css │ ├─ bootstrap.min.css │ ├─ bootstrap.min.css.map │ ├─ clean-blog.min.css │ └─ termynal.css ├─ favicon.ico ├─ img │ ├─ about-bg.jpg │ ├─ contact-bg.jpg │ ├─ home-bg.jpg │ ├─ post-bg.jpg │ └─ post-sample-image.jpg ├─ js │ ├─ axios.min.js │ ├─ bootstrap.bundle.min.js │ ├─ bootstrap.bundle.min.js.map │ ├─ bootstrap.min.js │ ├─ clean-blog.min.js │ ├─ htmx.min.js │ ├─ jquery.min.js │ └─ termynal.min.js ├─ redoc │ └─ redoc.standalone.js ├─ swagger │ ├─ swagger-ui-bundle.js │ └─ swagger-ui.css └─ webfonts ├─ fa-brands-400.eot ├─ fa-brands-400.svg ├─ fa-brands-400.ttf ├─ fa-brands-400.woff ├─ fa-brands-400.woff2 ├─ fa-regular-400.eot ├─ fa-regular-400.svg ├─ fa-regular-400.ttf ├─ fa-regular-400.woff ├─ fa-regular-400.woff2 ├─ fa-solid-900.eot ├─ fa-solid-900.svg ├─ fa-solid-900.ttf ├─ fa-solid-900.woff └─ fa-solid-900.woff2 ``` - 采用MVC(模型-视图-控制器)架构,分为以下几个模块: - models:定义数据模型,使用tortoise-orm和aerich实现数据库的创建和迁移 - views:定义视图函数,使用fastapi提供API接口和路由 - templates:定义网页模板,使用jinja2渲染HTML - static:存放静态资源,如图片,样式表,脚本等 - utils:定义工具函数,如日志记录,密码加密,token生成等 - config:定义配置文件,如数据库连接信息,密钥等 - main:定义程序入口,初始化应用和中间件 ## 技术栈: - [fastapi](https://fastapi.tiangolo.com/):一个基于Python的轻量级Web框架,适合构建RESTful API。 - [tortoise-orm](https://tortoise-orm.readthedocs.io/en/latest/):一个基于Python的ORM(对象关系映射)库,可以轻松地与数据库进行交互。 - [aerich](https://github.com/tortoise/aerich):一个基于tortoise-orm的数据库迁移工具,可以方便地对数据库结构进行变更和管理。 - [mysql](https://www.mysql.com/):一个流行的关系型数据库管理系统,用于存储和管理博客系统中的数据。 - [loguru](https://github.com/Delgan/loguru):一个基于Python的日志记录库,可以方便地对日志进行处理和分析。 - [jinja2](https://jinja.palletsprojects.com/en/3.0.x/):一个流行的模板引擎,可以方便地生成动态页面和数据模型。 ## 1. 安装依赖 使用 pip 安装 FastAPI、Tortoise ORM、Aerich、Loguru 和 Jinja2。并安装 MySQL 作为数据库。 ## 2. 配置 - 配置 Tortoise ORM 的数据库 URL、应用和模型所在文件夹 - 配置 Aerich 用于迁移和创建表 - 配置 Loguru 日志输出格式和保存位置 ## 3. 定义模型 使用 Tortoise ORM 定义 Post(博客文章)和Tag(文章标签)等模型。 ## 4. 使用 Aerich 迁移和创建表 运行 Aerich 命令 aerich init-db和 aerich upgrade 来迁移模型创建对应的数据库表。 ## 5. 注册路由和视图函数 使用 FastAPI 的 APIRouter 注册博客相关的路由,对应相应的视图函数用于展示文章列表、添加新文章等功能。 ## 6. 模板渲染 使用 Jinja2 渲染后端返回的文章详情数据为博客文章页面。FastAPI 的 Starlette 提供 Jinja2 集成用于在视图函数中返回渲染后的模板。 ## 7. 依赖注入 使用 FastAPI 的 Depends 装饰器为视图函数注入 Tortoise ORM 的仓库,用于数据库交互。 ## 8. 异步操作 视图函数使用异步语法,调用 Tortoise ORM 的异步 API 与数据库交互,并使用 await 同步运行多个数据库操作。 ## 9. 日志处理 使用 Loguru 日志库记录该应用的各类日志,方便排查问题。 ## 10. 后续优化 可以继续优化应用,支持 markdown 文章、文章搜索、评论等功能。同时补充更详细的文档和测试。