Skip to content

Commit 5987d00

Browse files
committed
update docs
1 parent 26be91f commit 5987d00

File tree

2 files changed

+33
-11
lines changed

2 files changed

+33
-11
lines changed

docs/backend/reference/model.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,11 @@ id_key = Annotated[
4040

4141
用于集成操作人信息到数据库表
4242

43+
::: warning
44+
在 fba 中,并没有默认集成操作人员信息到各个数据库表,但是我们提供了非常简易的集成方式
45+
4346
[请移步至 **操作人**](operator.md){.read-more}
47+
:::
4448

4549
### 日期时间
4650

@@ -60,10 +64,10 @@ class DateTimeMixin(MappedAsDataclass):
6064

6165
## 数据类基类
6266

63-
[MappedAsDataclass](https://docs.sqlalchemy.org/en/20/orm/dataclasses.html#orm-declarative-native-dataclasses)
64-
6567
声明性数据类基类,它将带有数据类集成,允许使用更高级配置,==但未集成日期时间=={.note}
6668

69+
了解 [MappedAsDataclass](https://docs.sqlalchemy.org/en/20/orm/dataclasses.html#orm-declarative-native-dataclasses)
70+
6771
```python
6872
class DataClassBase(MappedAsDataclass, MappedBase):
6973

docs/backend/reference/operator.md

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ title: 操作人
55
我们常见的后台管理系统中,经常会有一些比如创建人,更新人这类的信息,那这些信息是如何做的呢?下面我们就来讲一讲我们在 fba
66
中应该如何集成操作人信息
77

8-
在 fba 中,并没有默认集成操作人员信息到各个数据库表,但是我们提供了非常简易的集成方式:Mixin 类
9-
108
## 如何集成?
119

1210
打开 fba 项目 backend 目录,进入 `common/model.py` 文件中,你会看到 `UserMixin` 类就冰冷冷的站在那里,因为 fba
@@ -25,16 +23,36 @@ class UserMixin(MappedAsDataclass):
2523
首先,`UserMixin` 类所存储的信息只是用户的 id ,这也是一种常见的做法,那么问题来了:我该如何获取用户 id 并存储?
2624
我在后台展示的时候,肯定不能展示 id 吧?容我一一解答
2725

28-
### 如何获取用户 id 并存储
26+
## 如何获取用户 ID?
27+
28+
fba 通过 JWT 中间件将用户信息存储到了每个请求的上下文中,我们可以很轻松的通过 request 对象读取用户信息(在 Django,Flask
29+
等 Web 框架中, request 都是常驻嘉宾)
30+
31+
## 如何存储?
32+
33+
### 手动
34+
35+
首先,在接口函数中,像 Django/Flask 一样,传入一个 `request` 参数,最好,我们加上参数类型:`request: Request`
36+
,然后我们可以在接口函数中通过 `request.user.id` 轻松获取当前操作人员 id ,这样,在存储的时候,就可以传递此 id 进行存储
2937

30-
我们 fba 的绝明之处,就是充分利用了请求上下文功能,我们通过 JWT 中间件将用户信息存储到了每个请求的上下文中,后面我们会展开详细讲解
31-
JWT 中间件,然后,我们就可以很轻松的通过 request 对象读取用户信息,在 Django,flask 等 Web 框架中, request 都是常驻嘉宾
38+
### 自动
3239

33-
首先,在接口函数中,我们要像 Django/flask 一样,第一个参数写为 request,最好,我们加上参数类型:`request: Request`
34-
,然后我们可以在接口函数中通过 `request.user.id` 轻松获取当前操作人员 id ,这样,在存储的时候,此 id 就可以作为存储数据被添加到
35-
schema 或字典中
40+
利用 SQLAlchemy 的事件监听,我们可以轻松做到这一点
41+
42+
```python
43+
@event.listens_for(UserMixin, 'before_insert', propagate=True)
44+
def set_created_by(mapper, connection, target) -> None: # noqa: ANN001
45+
if hasattr(target, 'created_by'):
46+
target.created_by = ctx.user_id
47+
48+
49+
@event.listens_for(UserMixin, 'before_update', propagate=True)
50+
def set_updated_by(mapper, connection, target) -> None: # noqa: ANN001
51+
if hasattr(target, 'updated_by'):
52+
target.created_by = ctx.user_id
53+
```
3654

37-
### 我在后台展示的时候,肯定不能展示 id 吧
55+
## 如何展示?
3856

3957
当然不能,那该怎么办呢?虽然我们只存储了用户 id 到数据库,但当我们单查询或列表查询的时候,我们需要进行数据拦截,将 id 替换为
4058
username;

0 commit comments

Comments
 (0)