|
| 1 | +# 核心模块 API |
| 2 | + |
| 3 | +FastAPI Amis 核心模块的 API 参考文档。 |
| 4 | + |
| 5 | +## AmisSite |
| 6 | + |
| 7 | +站点管理类,用于创建和管理整个管理后台应用。 |
| 8 | + |
| 9 | +### 类定义 |
| 10 | + |
| 11 | +```python |
| 12 | +class AmisSite: |
| 13 | + def __init__( |
| 14 | + self, |
| 15 | + title: str = "Admin", |
| 16 | + logo: Optional[str] = None, |
| 17 | + favicon: Optional[str] = None, |
| 18 | + description: Optional[str] = None, |
| 19 | + theme: str = "cxd", |
| 20 | + layout: str = "aside", |
| 21 | + **kwargs |
| 22 | + ) |
| 23 | +``` |
| 24 | + |
| 25 | +### 参数 |
| 26 | + |
| 27 | +- `title` (str): 站点标题,默认 "Admin" |
| 28 | +- `logo` (Optional[str]): Logo URL |
| 29 | +- `favicon` (Optional[str]): 网站图标 URL |
| 30 | +- `description` (Optional[str]): 站点描述 |
| 31 | +- `theme` (str): 主题名称,默认 "cxd" |
| 32 | +- `layout` (str): 布局模式,默认 "aside" |
| 33 | + |
| 34 | +### 方法 |
| 35 | + |
| 36 | +#### add_router |
| 37 | + |
| 38 | +添加路由器到站点。 |
| 39 | + |
| 40 | +```python |
| 41 | +def add_router( |
| 42 | + self, |
| 43 | + router: AmisViewRouter, |
| 44 | + *, |
| 45 | + visible: bool = True |
| 46 | +) -> None |
| 47 | +``` |
| 48 | + |
| 49 | +**参数:** |
| 50 | + |
| 51 | +- `router` (AmisViewRouter): 要添加的路由器 |
| 52 | +- `visible` (bool): 是否在导航中显示,默认 True |
| 53 | + |
| 54 | +**示例:** |
| 55 | + |
| 56 | +```python |
| 57 | +site = AmisSite(title="管理后台") |
| 58 | +user_router = AmisViewRouter(name="用户管理") |
| 59 | +site.add_router(user_router) |
| 60 | +``` |
| 61 | + |
| 62 | +#### mount_to_app |
| 63 | + |
| 64 | +将站点挂载到 FastAPI 应用。 |
| 65 | + |
| 66 | +```python |
| 67 | +def mount_to_app( |
| 68 | + self, |
| 69 | + app: FastAPI, |
| 70 | + *, |
| 71 | + prefix: str = "", |
| 72 | + tags: Optional[List[str]] = None |
| 73 | +) -> None |
| 74 | +``` |
| 75 | + |
| 76 | +**参数:** |
| 77 | + |
| 78 | +- `app` (FastAPI): FastAPI 应用实例 |
| 79 | +- `prefix` (str): URL 前缀,默认 "" |
| 80 | +- `tags` (Optional[List[str]]): OpenAPI 标签 |
| 81 | + |
| 82 | +**示例:** |
| 83 | + |
| 84 | +```python |
| 85 | +app = FastAPI() |
| 86 | +site.mount_to_app(app, prefix="/admin") |
| 87 | +``` |
| 88 | + |
| 89 | +## AmisViewRouter |
| 90 | + |
| 91 | +路由器类,用于组织相关的视图。 |
| 92 | + |
| 93 | +### 类定义 |
| 94 | + |
| 95 | +```python |
| 96 | +class AmisViewRouter: |
| 97 | + def __init__( |
| 98 | + self, |
| 99 | + name: str, |
| 100 | + type: str = "page", |
| 101 | + icon: Optional[str] = None, |
| 102 | + visible: bool = True, |
| 103 | + **kwargs |
| 104 | + ) |
| 105 | +``` |
| 106 | + |
| 107 | +### 参数 |
| 108 | + |
| 109 | +- `name` (str): 路由器名称,显示在导航中 |
| 110 | +- `type` (str): 路由类型,默认 "page" |
| 111 | +- `icon` (Optional[str]): 图标类名 |
| 112 | +- `visible` (bool): 是否在导航中显示,默认 True |
| 113 | + |
| 114 | +### 方法 |
| 115 | + |
| 116 | +#### register |
| 117 | + |
| 118 | +装饰器方法,用于注册视图到路由器。 |
| 119 | + |
| 120 | +```python |
| 121 | +def register( |
| 122 | + self, |
| 123 | + view_class: Type[AmisView] |
| 124 | +) -> Type[AmisView] |
| 125 | +``` |
| 126 | + |
| 127 | +**参数:** |
| 128 | + |
| 129 | +- `view_class` (Type[AmisView]): 视图类 |
| 130 | + |
| 131 | +**返回:** |
| 132 | + |
| 133 | +- Type[AmisView]: 注册后的视图类 |
| 134 | + |
| 135 | +**示例:** |
| 136 | + |
| 137 | +```python |
| 138 | +router = AmisViewRouter(name="用户管理") |
| 139 | + |
| 140 | +@router.register |
| 141 | +class UserListView(AmisView): |
| 142 | + page_schema = "用户列表" |
| 143 | + url = "/users" |
| 144 | + page = Page(...) |
| 145 | +``` |
| 146 | + |
| 147 | +## AmisView |
| 148 | + |
| 149 | +视图基类,所有页面视图都应继承此类。 |
| 150 | + |
| 151 | +### 类定义 |
| 152 | + |
| 153 | +```python |
| 154 | +class AmisView: |
| 155 | + page_schema: str |
| 156 | + url: str |
| 157 | + page: Page |
| 158 | + icon: Optional[str] = None |
| 159 | + visible: bool = True |
| 160 | + dependencies: List[Depends] = [] |
| 161 | +``` |
| 162 | + |
| 163 | +### 属性 |
| 164 | + |
| 165 | +- `page_schema` (str): 页面描述 |
| 166 | +- `url` (str): 访问路径 |
| 167 | +- `page` (Page): Amis Page 组件实例 |
| 168 | +- `icon` (Optional[str]): 页面图标 |
| 169 | +- `visible` (bool): 是否在导航中显示 |
| 170 | +- `dependencies` (List[Depends]): FastAPI 依赖项列表 |
| 171 | + |
| 172 | +### 示例 |
| 173 | + |
| 174 | +```python |
| 175 | +class MyView(AmisView): |
| 176 | + page_schema = "我的页面" |
| 177 | + url = "/my-page" |
| 178 | + page = Page( |
| 179 | + title="页面标题", |
| 180 | + body=[...] |
| 181 | + ) |
| 182 | +``` |
| 183 | + |
| 184 | +### 高级用法 |
| 185 | + |
| 186 | +#### 动态页面 |
| 187 | + |
| 188 | +可以通过方法动态生成页面内容: |
| 189 | + |
| 190 | +```python |
| 191 | +class DynamicView(AmisView): |
| 192 | + page_schema = "动态页面" |
| 193 | + url = "/dynamic" |
| 194 | + |
| 195 | + def get_page(self, request: Request) -> Page: |
| 196 | + """根据请求动态生成页面""" |
| 197 | + user = request.state.user |
| 198 | + return Page( |
| 199 | + title=f"欢迎 {user.name}", |
| 200 | + body=[...] |
| 201 | + ) |
| 202 | +``` |
| 203 | + |
| 204 | +#### 依赖注入 |
| 205 | + |
| 206 | +使用 FastAPI 的依赖注入: |
| 207 | + |
| 208 | +```python |
| 209 | +from fastapi import Depends |
| 210 | + |
| 211 | +def get_current_user(request: Request): |
| 212 | + return request.state.user |
| 213 | + |
| 214 | +class UserProfileView(AmisView): |
| 215 | + page_schema = "个人资料" |
| 216 | + url = "/profile" |
| 217 | + dependencies = [Depends(get_current_user)] |
| 218 | + page = Page(...) |
| 219 | +``` |
| 220 | + |
| 221 | +## 类型定义 |
| 222 | + |
| 223 | +### BaseAmisModel |
| 224 | + |
| 225 | +所有 Amis 组件的基类。 |
| 226 | + |
| 227 | +```python |
| 228 | +from pydantic import BaseModel |
| 229 | + |
| 230 | +class BaseAmisModel(BaseModel): |
| 231 | + type: str |
| 232 | + |
| 233 | + class Config: |
| 234 | + extra = "allow" |
| 235 | +``` |
| 236 | + |
| 237 | +### PageSchema |
| 238 | + |
| 239 | +页面配置的类型定义。 |
| 240 | + |
| 241 | +```python |
| 242 | +class PageSchema(BaseModel): |
| 243 | + title: Optional[str] = None |
| 244 | + subTitle: Optional[str] = None |
| 245 | + body: Union[Dict, List, str] |
| 246 | + toolbar: Optional[List] = None |
| 247 | + aside: Optional[Dict] = None |
| 248 | +``` |
| 249 | + |
| 250 | +## 工具函数 |
| 251 | + |
| 252 | +### create_app_from_site |
| 253 | + |
| 254 | +从站点创建 FastAPI 应用的便捷函数。 |
| 255 | + |
| 256 | +```python |
| 257 | +def create_app_from_site( |
| 258 | + site: AmisSite, |
| 259 | + **fastapi_kwargs |
| 260 | +) -> FastAPI: |
| 261 | + """创建并配置 FastAPI 应用""" |
| 262 | + app = FastAPI(**fastapi_kwargs) |
| 263 | + site.mount_to_app(app) |
| 264 | + return app |
| 265 | +``` |
| 266 | + |
| 267 | +**示例:** |
| 268 | + |
| 269 | +```python |
| 270 | +site = AmisSite(title="管理后台") |
| 271 | +# ... 配置站点 |
| 272 | + |
| 273 | +app = create_app_from_site( |
| 274 | + site, |
| 275 | + title="管理后台 API", |
| 276 | + version="1.0.0" |
| 277 | +) |
| 278 | +``` |
| 279 | + |
| 280 | +## 异常类 |
| 281 | + |
| 282 | +### AmisException |
| 283 | + |
| 284 | +框架的基础异常类。 |
| 285 | + |
| 286 | +```python |
| 287 | +class AmisException(Exception): |
| 288 | + def __init__( |
| 289 | + self, |
| 290 | + message: str, |
| 291 | + status_code: int = 400, |
| 292 | + **kwargs |
| 293 | + ): |
| 294 | + self.message = message |
| 295 | + self.status_code = status_code |
| 296 | + self.extra = kwargs |
| 297 | +``` |
| 298 | + |
| 299 | +**示例:** |
| 300 | + |
| 301 | +```python |
| 302 | +from fastapi_amis.extensions.exception import AmisException |
| 303 | + |
| 304 | +if not user: |
| 305 | + raise AmisException( |
| 306 | + message="用户不存在", |
| 307 | + status_code=404 |
| 308 | + ) |
| 309 | +``` |
| 310 | + |
| 311 | +## 下一步 |
| 312 | + |
| 313 | +- [Amis 组件 API](components.md) - Amis 组件的 API 参考 |
| 314 | +- [扩展功能 API](extensions.md) - 扩展模块的 API 参考 |
| 315 | +- [类型定义](types.md) - 完整的类型定义 |
| 316 | + |
0 commit comments