Skip to content

Commit 496d856

Browse files
committed
update docs
1 parent d8a6122 commit 496d856

File tree

12 files changed

+74
-157
lines changed

12 files changed

+74
-157
lines changed

docs/.vuepress/styles/custom.css

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
--vp-c-brand-1: rgba(0, 148, 133, 1); /* 链接颜色、强调色 */
44
--vp-c-brand-2: rgba(0, 148, 133, 1); /* 链接、按钮 hover 颜色 */
55
--vp-c-brand-3: rgba(0, 148, 133, 1); /* 背景色、边框色 */
6-
color: #4582ff;
7-
background-color: rgba(255, 255, 255, 0.16);
86
}
97

108
[data-theme="dark"] {
@@ -13,10 +11,16 @@
1311
--vp-c-brand-3: rgba(0, 148, 133, 1); /* 背景色、边框色 */
1412
}
1513

16-
.vp-swiper .swiper-slide-img {
14+
.vp-repo-card,
15+
.vp-link-card,
16+
.vp-card-wrapper {
17+
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.27), 0 1px 2px rgba(255, 255, 255, 0.22) !important /* 卡片阴影效果 */
18+
}
19+
20+
.vp-swiper .swiper-slide-img { /* 轮播图图片拉伸效果 */
1721
object-fit: fill;
1822
}
1923

2024
.swiper-slide-custom-container {
21-
border: 1px solid rgb(177 177 177 / 66%) !important;
25+
border: 1px solid rgb(177 177 177 / 66%) !important; /* 轮播图边框 */
2226
}

docs/guide/reference/CRUD.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ title: CRUD
88
<RepoCard repo="fastapi-practices/sqlalchemy-crud-plus" />
99

1010
<iframe
11-
height=666
11+
height=500
1212
width=100%
1313
src="https://fastapi-practices.github.io/sqlalchemy-crud-plus/"
1414
frameborder=0

docs/guide/reference/apscheduler.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
title: APScheduler
33
---
44

5-
我们在最初的框架实现中,使用的是 APScheduler,但后来我们迁移到了 [Celery](celery.md)
6-
,详情请查看:[#225](https://github.com/fastapi-practices/fastapi_best_architecture/discussions/225)
5+
我们在最初的框架实现中,使用的是 APScheduler,但后来我们迁移到了
6+
Celery,详情请查看:[#225](https://github.com/fastapi-practices/fastapi_best_architecture/discussions/225)
77

88
FastAPI + APScheduler 现已作为独立仓库发行,它的优势在于其灵活性与动态任务,如果你没有繁重的任务需求,它将是一个不错的选择
99

docs/guide/reference/jwt.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ class JwtAuthMiddleware(AuthenticationBackend):
4545

4646
## Token
4747

48-
内置遵循 [rfc6750](https://datatracker.ietf.org/doc/html/rfc6750) 标准实现的 HTTP 授权方式,如果您想通过自定义 header 添加
49-
token 进行授权,可以查看 [Header Token(自定义 header token 实现授权)](../../planet.md#fastapi)
48+
内置 token 授权方式遵循 [rfc6750](https://datatracker.ietf.org/doc/html/rfc6750),如果您想通过自定义请求头添加 token
49+
进行授权,可以查看文章 [Header Token](../../planet.md#fastapi)
5050

5151
## 验证码登录
5252

5353
你可以通过此方式获取 token,在大多数情况下,这更适用于配合前端实现登录授权
5454

55-
我们在 fba 中使用 [fast_captcha](https://github.com/wu-clan/fast-captcha) 生成 base64 验证码,通过接口进行数据返回;您可以通过在线
55+
我们在 fba 中使用 [fast_captcha](https://github.com/wu-clan/fast-captcha) 生成 base64 验证码,然后通过接口进行数据返回;您可以通过在线
5656
base64 转图片或配合前端项目将其转为图片进行预览,以下使其工作流程:
5757

5858
```sequence 验证码登录逻辑
@@ -83,4 +83,5 @@ Token -->> 客户端: 成功
8383

8484
但是,想要使用此方式进行授权,你需要先了解 OAuth 2.0 相关知识,并遵循第三方平台认证要求,获取平台应用相关密钥,最终,手动编码完成集成
8585

86-
您可以在代码路径 `backend/app/admin/api/v1/oauth2` 中查看我们的官方实现示例
86+
我们在 fba 中使用 [fastapi-oauth20](https://github.com/fastapi-practices/fastapi-oauth20) 集成 OAuth 2.0,您可以在代码路径
87+
`backend/app/admin/api/v1/oauth2` 中查看我们的官方实现示例

docs/guide/reference/response.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ class ResponseModel(BaseModel):
1616
data: Any | None = None
1717
```
1818

19-
以下是使用此模型进行返回的示例(遵循 FastAPI 官方教程),`response_model` 参数和 `->` 类型我们只需选择其中一种方式即可,因为
20-
FastAPI 会在内部自动解析并获取最终响应结构
19+
以下是使用此模型进行返回的示例(遵循 FastAPI 官方教程),`response_model` 参数和 `->` 类型选择其中一种方式即可,FastAPI
20+
会在内部自动解析并获取最终响应结构
2121

2222
`response_model` 参数:
2323

@@ -42,14 +42,15 @@ ResponseModel 做为统一响应模型,你会在 Swagger 文档得到(如图
4242

4343
![response_model](/images/response_model.png)
4444

45-
显然,我们无法获取响应 Schema 中的 data 结构,前端同事找到你,你会告诉他们,你请求一下不就行了?(没毛病,但显然不太友好),下面就是我们的解决办法
45+
显然,我们无法获取响应 Schema 中的 data 数据结构,前端同事找到你,你会告诉他们,你请求一下不就行了?(没毛病,但显然不太友好),下面是我们创建的用于
46+
Schema 模式的统一返回模型
4647

4748
```python
4849
class ResponseSchemaModel(ResponseModel, Generic[SchemaT]):
4950
data: SchemaT
5051
```
5152

52-
这是我们创建的用于 Schema 模式的统一返回模型,它的用法与 `ResponseModel` 基本相似
53+
以下是使用此模型进行返回的示例(遵循 FastAPI 官方教程),它的用法与 ResponseModel 基本相似
5354

5455
`response_model` 参数:
5556

@@ -74,14 +75,14 @@ def test() -> ResponseSchemaModel[GetApiDetail]:
7475
我们可以看到,响应 Schema 中的 data 已经包含我们的响应体结构了,响应体结构正是解析的 `[]` 中的 Schema 模型,它们是对应的,如果返回的数据结构与
7576
Schema 不一致,将引发解析错误
7677

77-
==我们建议将这种方式仅用于查询接口==,如果你不需要这种文档/验证,你完全可以不使用它,而是使用更加开放的统一响应模型
78+
==我们建议将这种方式仅用于查询接口=={.note},如果你不需要这种文档,你完全可以不使用它,而是使用更加开放的统一响应模型
7879
ResponseModel
7980

8081
## 统一返回方法
8182

8283
`response_base` 是我们做的全局响应实例,它大大简化了响应返回方式,用法如下:
8384

84-
```python{3,8}
85+
```python{2-3,7-8}
8586
@router.get('/test')
8687
def test() -> ResponseModel:
8788
return response_base.success(data={'test': 'test'})
@@ -103,7 +104,7 @@ def test() -> ResponseSchemaModel[GetApiDetail]:
103104

104105
此方法通常作为默认响应方法使用,默认返回信息如下
105106

106-
```json
107+
```json:no-line-numbers
107108
{
108109
"code": 200,
109110
"msg": "请求成功",
@@ -115,7 +116,7 @@ def test() -> ResponseSchemaModel[GetApiDetail]:
115116

116117
此方法通常在接口响应信息为失败时使用,默认返回信息如下
117118

118-
```json
119+
```json:no-line-numbers
119120
{
120121
"code": 400,
121122
"msg": "请求错误",
@@ -127,7 +128,7 @@ def test() -> ResponseSchemaModel[GetApiDetail]:
127128

128129
此方法通常仅用于接口返回大型 json 时,可为 json 解析性能带来质的提升,默认返回信息如下
129130

130-
```json
131+
```json:no-line-numbers
131132
{
132133
"code": 200,
133134
"msg": "请求成功",

docs/guide/summary/fsm.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ title: 精简版本
66
FastAPI 三层架构脚手架精简版的更新可能并不同步,你可能无法及时的在这些版本中获得新功能支持和问题修复
77
:::
88

9-
> [!IMPORTANT]
10-
> 我们在积极寻找这些版本的维护人员,如果你对此感兴趣,请直接在对应仓库创建 ISSUES 或通过 Discord 与我们联系
11-
129
## SQLAlchemy
1310

1411
==推荐== 如果您正在使用 SQLAlchemy,请使用以下版本,并且它的维护频率较高,且由 fba 作者积极维护

docs/guide/summary/quick-start.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ title: 快速开始
33
---
44

55
::: caution
6-
==fba 仅适用于资深 Python 后端开发人员==,如果您是非资深用户,建议使用 [精简版](../summary/fsm.md)
6+
==fba 仅适用于资深 Python 后端开发人员=={.warning},如果您是非资深用户,建议使用 [精简版](../summary/fsm.md)
77
:::
88

99
> [!IMPORTANT]
10-
> 我们建议新手用户从一些基础和简单的内容入手,这不仅是对自身学习的一种负责态度,也是为将来能够顺利掌握这一架构所奠定的坚实基础,欢迎加入我们的
11-
> Discord 社区进行讨论
10+
> 我们建议新手用户从基础且简单的部分开始学习,这不仅是对自己学习负责的表现,也为未来顺利掌握这一架构奠定了坚实基础。欢迎加入我们的
11+
> Discord 社区,一起交流讨论!
1212
>
13-
> 最后,请认真对待此文档,并严格按照本文档的顺序启动项目,否则你有很大几率在启动过程中遇到各种问题
13+
> 最后,请务必认真阅读本文档,并严格按照文档的顺序启动项目,否则在启动过程中很可能会遇到各种问题。
1414
1515
## 本地开发
1616

@@ -122,7 +122,7 @@ title: 快速开始
122122
```shell:no-line-numbers
123123
celery -A app.task.celery beat -l info
124124
```
125-
125+
126126
@tab Flower
127127
```shell:no-line-numbers
128128
celery -A app.task.celery flower --port=8555 --basic-auth=admin:123456

docs/guide/summary/why.md

Lines changed: 8 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ import NpmBadge from 'vuepress-theme-plume/features/NpmBadge.vue'
1212
::: note
1313
我们不会去对比任何其他架构,我们认为每个架构都有自己的特点,适用于不同的场景。
1414

15-
但 fba 绝对是开源架构中代码最干净,最规范且最令人赏心悦目的项目之一
15+
但 fba 绝对是开源架构中代码==最干净,最规范且最令人赏心悦目=={.note}的项目之一
1616
:::
1717

1818
## 目标
1919

20-
==我们的目标==是提供一个最佳架构,让开发者可以快速上手,能够专注于业务逻辑开发,或从此架构中获得灵感,优化本地架构设计,所以我们只会不断完善和优化我们的架构,为开发者带来更好的体验
20+
我们的目标是提供一个最佳架构,让开发者可以快速上手,能够专注于业务逻辑开发,或从此架构中获得灵感,优化本地架构设计,所以我们只会不断完善和优化我们的架构,为开发者带来更好的体验
2121

2222
## 承诺
2323

@@ -36,7 +36,7 @@ import NpmBadge from 'vuepress-theme-plume/features/NpmBadge.vue'
3636

3737
- MIT 协议 + 架构源码全量开源
3838
- GitHub 模板仓库,便捷复制和自主命名
39-
- 架构内没有任何以 `fba` 强制命名的内容,也就是说,你可以通过 IDE 快捷替换所有 `fba` 参数为自定义
39+
- 没有任何以 `fba` 强制命名的内容,也就是说,你可以通过 IDE 统一替换所有 `fba` 关键字为其他
4040

4141
## 长期维护
4242

@@ -46,101 +46,14 @@ import NpmBadge from 'vuepress-theme-plume/features/NpmBadge.vue'
4646

4747
## 框架由来
4848

49-
我们有一个完整的关于 fba 由来的 [issue](https://github.com/fastapi-practices/fastapi_sqlalchemy_mysql/issues/5)
50-
但它被不小心删除且无法到达 😭,我们尝试联系了 GitHub 支持,但我们只能获取 issue 问题本身的正文 😭
49+
我们有一个完整的关于 fba 由来的 [issues](https://github.com/fastapi-practices/fastapi_sqlalchemy_mysql/issues/5)
50+
但它被不小心永久删除且无法恢复 😭,我们尝试联系了 GitHub 支持,但不幸的是,我们仍无法获取完整 issues 😭
5151

52-
大致内容为我们的核心团队成员 [downdawn](https://github.com/downdawn) 在 fba 创建之前,找到了 fba 现在的精简版
53-
[fastapi_sqlalchemy_mysql](fsm.md#sqlalchemy),并创建了 issue:==几点讨论与建议==;我们就此 issue 展开了为期数天的讨论,最终决定并创建了
52+
大致内容为我们的核心团队成员 [downdawn](https://github.com/downdawn) 在 fba 创建之前,找到了 fba
53+
的前身仓库 [fastapi_sqlalchemy_mysql](fsm.md#sqlalchemy),并创建了 issue:【几点讨论与建议】;我们就此 issue
54+
展开了为期数天的讨论,最终决定并创建了
5455
fba
5556

56-
::: details issue 正文(由 GitHub 支持提供,无法保证原始性)
57-
> ==讨论一:更清晰的结构建议==
58-
>
59-
>现在的api结构是:
60-
>
61-
>```
62-
>api
63-
> ═── service/
64-
> ═── v1
65-
> │ ═── auth
66-
> ═── init .py
67-
> ═──casbin.py
68-
> ═──jwt.py
69-
> ═──registrar.py
70-
> ═──routers.py
71-
>```
72-
>
73-
>参考几个开源项目,结合个人建议是api目录下保留最简单的结构,casbin、jwt、registrar可以移动到其他目录,比如core。
74-
>
75-
>api <br/>
76-
> │ <br/>
77-
> ...
78-
>
79-
>api——>初始化.py
80-
>
81-
>```python
82-
>from fastapi import APIRouter
83-
>from api.auth import router as auth_router
84-
>
85-
>v1 = APIRouter(prefix='/v1')
86-
>
87-
>v1.include_router(auth_router)
88-
>```
89-
>
90-
>api——>v1——>auth——>初始化.py
91-
>
92-
>```python
93-
>from fastapi import APIRouter
94-
>from api.auth.user import router as user_router
95-
>
96-
>router = APIRouter(prefix='/auth', tags=['认证'])
97-
>
98-
>router.include_router(user_router, prefix='/user')
99-
>```
100-
>
101-
>==讨论二:基于类的视图==
102-
>
103-
>参考该讨论:https://github.com/zhanymkanov/fastapi-best-practices/issues/4与fastapi-utils项目
104-
>
105-
>基于类的比每个零散的方法看起来会更加清晰,并且可以在一个py管理多个路由(有时需要)
106-
>
107-
>```python
108-
>from utils.cvb import cbv
109-
>
110-
>router = APIRouter(prefix='/api')
111-
>
112-
>
113-
>@cbv(router)
114-
>class APIRouter:
115-
>user: User = Depends(get_current_user)
116-
>service = ApiService()
117-
>
118-
>@router.get('', summary='获取所有API', response_model=Page[GetAllApi])
119-
>async def get_all_api(self):
120-
>print(self.user)
121-
>return await self.service.get_api_list()
122-
>```
123-
>
124-
>如上,原先的service文件里的方法也封装成ApiService类。同时建议service应该每个路由模块里都有一个,类似如下结构:
125-
>
126-
>api <br/>
127-
> │ │ │ <br/>
128-
> │ │ │ │ │ │ │ │ <br/>
129-
> │ │ │ │ │ │ │ │ │ │
130-
>
131-
>这样的话,应该有个Service基类,包含常见的query、create、update、delete方法。
132-
>
133-
>同时async with async_db_session.begin() as db:每个方法都有,可以进一步优化?
134-
>
135-
> ==讨论三:权限==
136-
>
137-
>casbin是go项目扩展出来的思想?感觉有点冗重,权限这块自己封装比较好自定义。
138-
>
139-
>简单的基于redis或者mysql定义crud,可以对不同路由或者请求方法设置不同的权限。
140-
>
141-
>目前还没有很好的实现方法,但是参考过往的项目应该不难。
142-
:::
143-
14457
## 套件产物
14558

14659
在创建和迭代 fba 的同时,我们创建了很多与之相关的套件,且他们非常实用,并且我们做到了 0 耦合,您完全可以将它们用到其他与之相关的项目中去

docs/plugin/before.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ title: 前言
1010

1111
提供一个共创平台,告别高耦合集成,让功能变得可轻松 Hot Swap(热插拔)
1212

13-
遗憾的是,我们并不会提供会员制插件后台管理平台对插件进行统一管理,我们计划将所有插件在 [插件市场](market.md) 进行展示和导航
13+
遗憾的是,我们并不会提供插件管理平台对插件进行统一管理,我们计划将所有插件在 [插件市场](market.md) 进行展示和导航
1414

1515
## 开发
1616

@@ -30,8 +30,8 @@ title: 前言
3030

3131
## 技术支持
3232

33-
我们会在社区内为每个插件提供独立互动频道,第三方插件用户需自行联系第三方插件作者,我们不提供任何第三方插件技术支持
33+
需自行联系插件开发者
3434

3535
## 免责声明
3636

37-
我们会尽可能的加强插件审核力度,但对于插件作者跑路行为,我们不承担任何责任
37+
但对于付费插件作者跑路行为,我们不承担任何责任

docs/plugin/market.md

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@ title: 插件市场
33
---
44

55
::: warning
6-
插件功能目前处于测试阶段,如有任何建议,请立即和我们 [反馈](https://discord.com/channels/1185035164577972344/1332032404663046204)
6+
插件功能目前处于测试阶段,如有任何建议,请立即和我们 [反馈](https://discord.com/channels/1185035164577972344/1349951379560599572)
77
88
:::
99

10-
::: info
11-
您可以在 [插件互动频道](https://discord.gg/5SDAZgDya9) 与插件作者及社区人员进行互动和交流
10+
::: info 标签说明
1211

1312
- <Badge type="info" text="free" /> - 免费插件
1413
- <Badge type="danger" text="pay" /> - 付费插件
@@ -24,23 +23,23 @@ title: 插件市场
2423
这些插件由 fba 开发人员提供和维护
2524

2625
<CardGrid>
27-
<LinkCard icon="fe:notice-active" title="通知公告" href="https://discord.com/channels/1185035164577972344/1336557178437373984">
28-
<p style="color: #898989;">添加通知公告功能</p>
26+
<Card icon="fe:notice-active" title="通知公告">
27+
<p style="color: #898989;">【内置】添加通知公告功能</p>
2928
<span>
3029
<Badge type="info" text="free" />
3130
<Badge type="tip" text="fba" />
3231
<Badge text="extra" color="#11aa00"/>
3332
</span>
34-
</LinkCard>
35-
<LinkCard icon="solar:user-check-bold" title="Casbin-RBAC" href="https://discord.com/channels/1185035164577972344/1340300371251302451">
36-
<p style="color: #898989;">添加基于 Casbin 实现的 RBAC 权限</p>
33+
</Card>
34+
<Card icon="solar:user-check-bold" title="Casbin-RBAC">
35+
<p style="color: #898989;">【内置】添加基于 Casbin 实现的 RBAC 权限</p>
3736
<span>
3837
<Badge type="info" text="free" />
3938
<Badge type="tip" text="fba" />
4039
<Badge text="extra" color="#11aa00"/>
4140
</span>
42-
</LinkCard>
43-
<LinkCard icon="ant-design:aliyun-outlined" title="阿里云 oss" href="https://discord.com/channels/1185035164577972344/1342478204400832593">
41+
</Card>
42+
<LinkCard icon="ant-design:aliyun-outlined" title="阿里云 oss" href="https://github.com/fastapi-practices/fba_aliyun_oss">
4443
<p style="color: #898989;">添加阿里云 oss 上传文件功能</p>
4544
<span>
4645
<Badge type="info" text="free" />

0 commit comments

Comments
 (0)