Skip to content

Commit 4543ef4

Browse files
committed
Merge remote-tracking branch 'origin/master'
# Conflicts: # fastapi_amis_admin/admin/settings.py
2 parents 6b3596d + fb1144e commit 4543ef4

19 files changed

Lines changed: 461 additions & 76 deletions

File tree

.github/workflows/build-docs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
uses: actions/setup-python@v5
1717
with:
1818
python-version: 3.8
19-
- uses: actions/cache@v3
19+
- uses: actions/cache@v4
2020
id: cache
2121
with:
2222
path: ${{ env.pythonLocation }}

.github/workflows/pytest.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ jobs:
2424
steps:
2525
- uses: actions/checkout@v4
2626
- name: Set up PDM
27-
uses: pdm-project/setup-pdm@v3
27+
uses: pdm-project/setup-pdm@v4
2828
with:
2929
python-version: ${{ matrix.python-version }}
3030
cache: true
3131

32-
- uses: actions/cache@v3
32+
- uses: actions/cache@v4
3333
id: cache
3434
with:
3535
path: ${{ env.pythonLocation }}

.github/workflows/python-publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
uses: actions/setup-python@v5
1616
with:
1717
python-version: "3.8"
18-
- uses: actions/cache@v3
18+
- uses: actions/cache@v4
1919
id: cache
2020
with:
2121
path: ${{ env.pythonLocation }}

README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ everyone's sponsorship and support.
6262
- [SQLModel](https://sqlmodel.tiangolo.com/): Finish `ORM` model mapping. Perfectly
6363
combine [SQLAlchemy](https://www.sqlalchemy.org/) with [Pydantic](https://pydantic-docs.helpmanual.io/), and have all
6464
their features .
65-
- [Amis](https://baidu.gitee.io/amis): Finish admin page presentation.
65+
- [Amis](https://baidu.github.io/amis/): Finish admin page presentation.
6666

6767
## Composition
6868

@@ -83,8 +83,6 @@ pip install fastapi_amis_admin
8383

8484
### Note
8585

86-
- `sqlmodel` currently does not support `sqlalchemy 2.0+`. If you use `sqlalchemy 2.0+` to create a model, you cannot
87-
use `sqlmodel` at the same time.
8886
- After version `fastapi-amis-admin>=0.6.0`, `sqlmodel` is no longer a required dependency library. If you use `sqlmodel`
8987
to create a model, you can install it with the following command.
9088

README.zh.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
- [SQLModel](https://sqlmodel.tiangolo.com/) 负责ORM模型映射(
6565
完美结合[SQLAlchemy](https://www.sqlalchemy.org/)+[Pydantic](https://pydantic-docs.helpmanual.io/), 拥有`SQLAlchemy`
6666
`Pydantic`的所有功能)
67-
- [Amis](https://baidu.gitee.io/amis) 负责Admin后台页面展示
67+
- [Amis](https://aisuda.bce.baidu.com/amis/) 负责Admin后台页面展示
6868

6969
## 项目组成
7070

docs/zh/docs/index.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ pip install fastapi_amis_admin
8787

8888
```bash
8989
pip install fastapi_amis_admin[sqlmodel]
90-
```
90+
```
9191

9292
## 简单示例
9393

@@ -110,6 +110,11 @@ if __name__ == '__main__':
110110

111111
uvicorn.run(app)
112112
```
113+
### 运行程序
114+
```bash
115+
uvicorn main:app <--port 端口号> <--reload>
116+
```
117+
--port为指定启动端口(默认8000),--reload为开发过程中允许运行时重载。
113118

114119
## 模型管理示例
115120

docs/zh/docs/tutorials/basic/FormAdmin.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ from fastapi_amis_admin.crud import BaseApiOut
1010
from fastapi_amis_admin.models.fields import Field
1111
from pydantic import BaseModel
1212
from starlette.requests import Request
13-
13+
from fastapi_amis_admin.amis import Form
14+
from typing import Any
1415

1516
@site.register_admin
1617
class UserLoginFormAdmin(admin.FormAdmin):

docs/zh/docs/tutorials/basic/Inheritance.md

Lines changed: 83 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,42 @@ class MyHomeAdmin(admin.HomeAdmin):
2222
# 获取默认页面
2323
page = await super().get_page(request)
2424
# 自定义修改
25-
page.body.title = 'MyHome'
25+
# page.body.title = 'MyHome' # page.body已改为list类型,该行废弃
26+
# 修改后台首页的内页标题
27+
page.title = 'MyHome'
28+
# 后台首页主体尾部追加内容
29+
page.body.append('welcome FastApi-AMIS')
2630
...
2731
return page
2832
```
2933

30-
## 示例-2(自定义模板管理基类)
34+
## 示例-2.1(自定义模板管理基类)
35+
36+
根目录`templates`文件夹中新建`element.html`,html内容如下:
37+
```html
38+
<!DOCTYPE html>
39+
<html lang="en">
40+
<head>
41+
<meta charset="UTF-8">
42+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
43+
<title>{{ title }}</title>
44+
</head>
45+
<body>
46+
<h1>{{ title }}</h1>
47+
<p>The current time is: {{ current_time }}</p>
48+
</body>
49+
</html>
50+
```
3151

52+
main.py增加如下代码:
3253
```python linenums="1" hl_lines="6 7 11 20"
3354
import datetime
3455

3556
from fastapi_amis_admin import admin, amis
3657

3758

3859
class MyJinja2Admin(admin.TemplateAdmin):
39-
templates: Jinja2Templates = Jinja2Templates(directory='apps/demo/templates')
60+
templates: Jinja2Templates = Jinja2Templates(directory='templates')
4061

4162

4263
@site.register_admin
@@ -53,9 +74,68 @@ class ElementTemplateAdmin(MyJinja2Admin):
5374
page_schema = amis.PageSchema(label='ElementUI', icon='fa fa-link')
5475
template_name = 'element.html'
5576

77+
async def get_page(self, request: Request) -> Dict[str, Any]:
78+
page = await super().get_page(request)
79+
# 有别于示例1中 admin.HomeAdmin 对page的修改,这里的page来自 admin.TemplateAdmin,是一个dict
80+
page['title'] = 'Element Title' # 该行不会生效
81+
return {'current_time': datetime.datetime.now(), 'title': 'Element Content'}
82+
5683
```
84+
## 示例-2.2(将多个page以tab形式展示)
85+
我们基于示例2.1进行修改,
86+
1、首先将`SimpleTemplateAdmin``ElementTemplateAdmin`的页面注册装饰函数(`@site.register_admin`)注释或删除。
87+
2、我们创建一个Page管理页,然后将上述2个页面注册到`TemplatePageApp`下。
88+
```python
89+
from fastapi_amis_admin import admin, amis
90+
from fastapi_amis_admin.admin import AdminApp
91+
from fastapi_amis_admin.amis import TabsModeEnum
92+
93+
94+
@site.register_admin
95+
class TemplatePageApp(admin.AdminApp):
96+
page_schema = PageSchema(label="TemplatePage", icon="fa fa-link", tabsMode=TabsModeEnum.chrome)
97+
98+
def __init__(self, app: "AdminApp"):
99+
super().__init__(app)
100+
self.register_admin(
101+
SimpleTemplateAdmin,
102+
ElementTemplateAdmin,
103+
)
104+
```
105+
此时,左侧菜单栏将会显示TemplatePageApp的类目,同时TemplatePageApp页面下则显示`SimpleTemplateAdmin``ElementTemplateAdmin`相关tab。
106+
57107

58108
## 示例-3(重用模型管理类)
109+
我们在*模型管理*-示例2的基础上进行改造,将`Article`类新增一行属性`is_active: bool = False # add`,如下:
110+
```python linenums="1" hl_lines="32"
111+
class Article(Base):
112+
__tablename__ = 'article'
113+
114+
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
115+
title: Mapped[str] = mapped_column(String(200), nullable=False)
116+
description: Mapped[str] = mapped_column(String(400), default='')
117+
status: Mapped[bool] = mapped_column(Boolean, default=False)
118+
content: Mapped[str] = mapped_column(String, nullable=False)
119+
category_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey('category.id'))
120+
is_active: bool = False # add
121+
122+
```
123+
然后我们继承原油`ArticleAdmin`重新实现一个新的page类别:
124+
```python
125+
@site.register_admin
126+
class ActiveArticle(ArticleAdmin):
127+
"""继承重用`ArticleAdmin`;此示例较为简单,实际应用可能比较复杂."""
128+
page_schema = PageSchema(label='文章管理(已激活)', icon='fa fa-file')
129+
# 自定义路由前缀
130+
router_prefix = '/article.active'
131+
132+
# 重写基础选择器
133+
async def get_select(self, request: Request) -> Select:
134+
stmt = await super().get_select(request)
135+
return stmt.where(Article.is_active == True)
136+
```
137+
此时,page中将分别有`文章管理`以及`文章管理(已激活)`,后者将只显示`is_active`为True的文章。
138+
## ~~~示例-3(重用模型管理类)~~~
59139

60140
```python linenums="1" hl_lines="32"
61141
from fastapi_amis_admin import admin

docs/zh/docs/tutorials/basic/ModelAction.md

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@
88
## 自定义工具条动作
99

1010
### 示例-1
11-
11+
1、增加引用
1212
```python
13-
@site.register_admin
14-
class ArticleAdmin(admin.ModelAdmin):
15-
page_schema = PageSchema(label='文章管理', icon='fa fa-file')
16-
model = Article
13+
from fastapi_amis_admin.admin.admin import AdminAction
14+
from fastapi_amis_admin.amis import ActionType
15+
```
16+
2、修改上一节中`ArticleAdmin`类,`page_schema`改为`page_schema = PageSchema(label='文章管理', icon='fa fa-file')`以增加图标,同时类中增加如下代码,来添加工具条
1717

18+
```python
1819
# 添加自定义工具条动作
1920
admin_action_maker = [
2021
lambda admin: AdminAction(
@@ -47,13 +48,19 @@ class ArticleAdmin(admin.ModelAdmin):
4748
!!! note annotate "关于`ActionType`"
4849

4950
ActionType事实上是[amis Action 行为按钮](https://baidu.gitee.io/amis/zh-CN/components/action?page=1)组件的一个python模型映射,它支持多种常见的行为类型.例如:ajax请求/下载请求/跳转链接/发送邮件/弹窗/抽屉/复制文本等等.
50-
51+
5152
fastapi_amis_admin的灵活性强体现之一,是因为它是基于amis的组件式开发,你可以在很多地方自由的替换或添加内置的amis组件.在此之前希望你能阅读[amis文档](https://baidu.gitee.io/amis/zh-CN/components/page),对amis核心组件有一定的了解.
5253

5354
## 自定义单项操作动作
5455

56+
我们将在上一步的基础上新增一个自定义普通处理动作
5557
### 示例-2
56-
58+
新增引入
59+
```python
60+
from typing import List
61+
from fastapi_amis_admin.amis import Dialog
62+
```
63+
增加一个普通动作定义:
5764
```python
5865
# 创建普通ajax动作
5966
class TestAction(admin.ModelAction):
@@ -68,15 +75,31 @@ class TestAction(admin.ModelAction):
6875
...
6976
# 返回动作处理结果
7077
return BaseApiOut(data=dict(item_id=item_id, data=data, items=list(items)))
78+
```
79+
修改`ArticleAdmin`,在`admin_action_maker`的list中追加一行`lambda admin: TestAction(admin, name='test_action', flags=['item', 'bulk'])`变为:
7180

72-
73-
@site.register_admin
74-
class ArticleAdmin(admin.ModelAdmin):
75-
page_schema = PageSchema(label='文章管理', icon='fa fa-file')
76-
model = Article
77-
# 添加自定义单项和批量操作动作
81+
```python
82+
# 添加自定义工具条动作
7883
admin_action_maker = [
79-
lambda admin: TestAction(admin, name='test_action',flags=['item','bulk'])
84+
lambda admin: AdminAction(
85+
admin=admin,
86+
name='test_ajax_action',
87+
action=ActionType.Ajax(
88+
label='工具条ajax动作',
89+
api='https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/mock2/form/saveForm'
90+
),
91+
flags=['toolbar']
92+
),
93+
lambda admin: AdminAction(
94+
admin=admin,
95+
name='test_link_action',
96+
action=ActionType.Link(
97+
label='工具条link动作',
98+
link='https://github.com/amisadmin/fastapi_amis_admin'
99+
),
100+
flags=['toolbar']
101+
),
102+
lambda admin: TestAction(admin, name='test_action', flags=['item', 'bulk'])
80103
]
81104
```
82105

@@ -90,6 +113,7 @@ class ArticleAdmin(admin.ModelAdmin):
90113

91114
## 自定义批量操作动作
92115

116+
本部分修改方式同上一步。
93117
### 示例-3
94118

95119
```python
@@ -116,19 +140,9 @@ class TestFormAction(admin.ModelAction):
116140
...
117141
# 返回动作处理结果
118142
return BaseApiOut(data=dict(item_id=item_id, data=data, items=list(items)))
119-
120-
121-
@site.register_admin
122-
class ArticleAdmin(admin.ModelAdmin):
123-
page_schema = PageSchema(label='文章管理', icon='fa fa-file')
124-
model = Article
125-
126-
# 添加自定义单项和批量操作动作
127-
admin_action_maker = [
128-
lambda admin: TestAction(admin, name='test_action',flags=['item','bulk'])
129-
]
130-
131143
```
144+
`admin_action_maker`的list中追加一行`lambda admin: TestFormAction(admin, name='test_form_action', flags=['item', 'bulk'])`
145+
132146

133147
示例-3与示例-2非常相似, 但是它允许用户添加一个自定义表单,这个在很多情况下,非常有用.
134148

0 commit comments

Comments
 (0)