Skip to content

Commit 7149c2f

Browse files
committed
更新适配部分docs到最新版本,已更新到ModelAdmin
1 parent fe77379 commit 7149c2f

5 files changed

Lines changed: 114 additions & 9 deletions

File tree

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/ModelAdmin.md

Lines changed: 75 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,48 @@
33
模型管理在后台管理中是最为常用的一个管理类,其使用功能也是最为丰富的. fastapi-amis-admin目前已经实现针对数据模型常用的各种基本操作,
44
并且你仍然可以在此基础上做出更多个性化的拓展.
55

6-
## 示例-1
6+
## 示例1(基于SQLAlchemy 2.0)
7+
```python
8+
from sqlalchemy import String
9+
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
10+
from typing import Optional
11+
12+
13+
class Base(DeclarativeBase):
14+
pass
15+
16+
17+
class CategorySchema(BaseModel):
18+
id: Optional[int] = Field(default=None, primary_key=True, nullable=False)
19+
name: str = Field(title="CategoryName")
20+
description: str = Field(default="", title="CategoryDescription")
21+
22+
class Config:
23+
# orm_mode = True
24+
from_attributes = True
25+
26+
27+
# 创建SQLAlchemy 2.0模型,详细请参考: https://docs.sqlalchemy.org/en/20/orm/quickstart.html
28+
class Category(Base):
29+
__tablename__ = "category"
30+
__pydantic_model__ = CategorySchema # 指定模型对应的Schema类.省略可自动生成,但是建议指定.
31+
32+
id: Mapped[int] = mapped_column(primary_key=True, nullable=False)
33+
name: Mapped[str] = mapped_column(String(100), unique=True, index=True, nullable=False)
34+
description: Mapped[str] = mapped_column(String(255), default="")
35+
```
36+
`app = FastAPI()`下方添加以下内容来创建数据表:
37+
```python
38+
@app.on_event("startup")
39+
async def startup():
40+
await site.db.async_run_sync(Category.metadata.create_all, is_session=False)
41+
pass
42+
```
43+
44+
## ~~示例-1(基于SQLModel)~~
745

846
```python
47+
948
# 先创建一个SQLModel模型,详细请参考: https://sqlmodel.tiangolo.com/
1049
class Category(SQLModel, table=True):
1150
id: Optional[int] = Field(default=None, primary_key=True, nullable=False)
@@ -30,10 +69,42 @@ class CategoryAdmin(admin.ModelAdmin):
3069
!!! note annotate "关于SQLModel模型"
3170

3271
事实上这部分代码并不属于`amis-admin`的代码,因为它可以用重用在任何需要ORM映射的地方, 在项目中你应该单独定义一个`models.py`文件编写这部分代码.
33-
72+
3473
SQLModel是一个非常优秀的Python ORM库,由FastAPI同一位作者编写,完美的结合了SQLAlchemy和Pydantic.请阅读它的官方文档: https://sqlmodel.tiangolo.com/
3574

36-
## 示例-2
75+
## 示例-2(基于SQLAlchemy 2.0)
76+
```python
77+
from sqlalchemy import String, Integer, Boolean, ForeignKey, Select
78+
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
79+
from typing import Optional
80+
81+
class Article(Base):
82+
__tablename__ = 'article'
83+
84+
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
85+
title: Mapped[str] = mapped_column(String(200), nullable=False)
86+
description: Mapped[str] = mapped_column(String(400), default='')
87+
status: Mapped[bool] = mapped_column(Boolean, default=False)
88+
content: Mapped[str] = mapped_column(String, nullable=False)
89+
category_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey('category.id'))
90+
91+
92+
@site.register_admin
93+
class ArticleAdmin(admin.ModelAdmin):
94+
page_schema = '文章管理'
95+
model = Article
96+
# 设置需要展示的字段
97+
list_display = [Article.id, Article.title, Article.description, Article.status, Category.name]
98+
# 设置模糊搜索字段
99+
search_fields = [Article.title, Category.name]
100+
101+
# 自定义基础选择器
102+
async def get_select(self, request: Request) -> Select:
103+
stmt = await super().get_select(request)
104+
return stmt.outerjoin(Category, Article.category_id == Category.id)
105+
```
106+
同时,将前文定义的`def startup()`函数追加一行`await site.db.async_run_sync(Article.metadata.create_all, is_session=False)`用于生成对应数据表。
107+
## ~~~示例-2(基于SQLModel)~~~
37108

38109
```python
39110
# 创建一个SQLModel模型,详细请参考: https://sqlmodel.tiangolo.com/
@@ -140,6 +211,6 @@ class ArticleAdmin(admin.ModelAdmin):
140211
!!! note annotate "关于fastapi_amis_admin与django-admin"
141212

142213
[django-admin](https://docs.djangoproject.com/zh-hans/4.0/ref/contrib/admin/)是一个非常成熟强大的web管理后台工具,使用django的用户应该经常使用到它,但他是并不适用于非django项目,这也是fastapi_amis_admin诞生的主要原因之一.
143-
214+
144215
fastapi_amis_admin相比django-admin拥有更多的拓展与功能,但是fastapi_amis_admin目前仍然处于成长阶段,很多功能并不成熟,需要漫长的不断完善与升级.非常期待你参与到[fastapi_amis_admin](https://github.com/amisadmin/fastapi_amis_admin)的项目开发之中,为项目贡献代码,或为项目[提供建议](https://github.com/amisadmin/fastapi_amis_admin/issues).
145216

docs/zh/docs/tutorials/basic/PageAdmin.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,14 @@
88
## 页面管理
99

1010
`PageAdmin`实现在菜单列表显示一个菜单.点击菜单后将展现一个`amis`页面.
11-
你可以通过阅读[`baidu-amis`官方文档](https://baidu.gitee.io/amis/zh-CN/components/page)
11+
你可以通过阅读[`baidu-amis`官方文档(国内)](https://aisuda.bce.baidu.com/amis/zh-CN/components/page)
1212
,实现各种复杂的页面展示.先看一个Hello World页面示例吧.
1313

14+
在main.py中的`site.mount_app(app)`上方添加:
1415
```python
16+
from fastapi_amis_admin.admin import admin
17+
from fastapi_amis_admin.amis.components import Page
18+
1519
@site.register_admin
1620
class HelloWorldPageAdmin(admin.PageAdmin):
1721
page_schema = 'Hello World Page'
@@ -21,7 +25,11 @@ class HelloWorldPageAdmin(admin.PageAdmin):
2125

2226
非常简单吧,接下来再实现一个获取当前时间的页面.
2327

28+
在main.py中的`site.mount_app(app)`上方添加:
2429
```python
30+
import time
31+
from fastapi import Request
32+
2533
@site.register_admin
2634
class CurrentTimePageAdmin(admin.PageAdmin):
2735
page_schema = 'Current Time Page'
@@ -43,7 +51,7 @@ class CurrentTimePageAdmin(admin.PageAdmin):
4351
@site.register_admin
4452
class AmisPageAdmin(admin.PageAdmin):
4553
page_schema = 'Amis Json Page'
46-
page = Page.parse_obj(
54+
page = Page.model_validate(
4755
{
4856
"type": "page",
4957
"title": "表单页面",
@@ -67,7 +75,7 @@ class AmisPageAdmin(admin.PageAdmin):
6775
}
6876
)
6977
```
70-
78+
!!! note annotate 注意,所有装饰器`@site.register_admin`涉及的类都应在`site.mount_app(app)`之前注册。
7179
## 链接管理
7280

7381
`LinkAdmin`实现在菜单列表显示一个链接跳转菜单.点击菜单后将通过打开一个新的浏览器标签,访问设置的链接:

docs/zh/docs/tutorials/basic/TemplateAdmin.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,27 @@
55

66
## 示例
77

8+
在根目录下创建模板目录`templates`,并在模板目录创建`simple.html`文件,内容如下:
9+
```html
10+
<!DOCTYPE html>
11+
<html lang="en">
12+
<head>
13+
<meta charset="UTF-8">
14+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
15+
<title>Current Time</title>
16+
</head>
17+
<body>
18+
<h1>Current Time</h1>
19+
<p>The current time is: {{ current_time }}</p>
20+
</body>
21+
</html>
22+
```
23+
824
```python
25+
from fastapi_amis_admin.admin.admin import Jinja2Templates
26+
import datetime
27+
from typing import Dict
28+
929
@site.register_admin
1030
class SimpleTemplateAdmin(admin.TemplateAdmin):
1131
page_schema = PageSchema(label='SimpleTemplate', icon='fa fa-link')

0 commit comments

Comments
 (0)