项目介绍¶
FastAPI-Amis-Admin
fastapi-amis-admin是一个拥有高性能,高效率,易拓展的fastapi管理后台框架.
启发自Django-Admin,并且拥有不逊色于Django-Admin的强大功能.
fastapi-amis-admin是一个基于fastapi+amis开发的高性能并且高效率 web-admin 框架,使用 Python 3.7+ 并基于标准的 Python 类型提示.
fastapi-amis-admin开发的初衷是为了完善fastapi应用生态, 为fastapi web应用程序快速生成一个可视化管理后台.
关键特性¶
-
性能极高:基于FastAPI, 可享受
FastAPI的全部优势. -
效率更快:完善的编码类型提示, 代码可重用性更高.
-
支持异步和同步混合编写:
ORM基于SQLModel+Sqlalchemy, 可自由定制数据库类型, 支持同步及异步模式, 可拓展性强. -
前后端分离: 前端由
Amis渲染, 后端接口由fastapi-amis-admin自动生成, 接口可重复利用. -
可拓展性强: 后台页面支持
Amis页面及普通html页面,开发者可以很方便的自由定制界面. -
自动生成API文档: 由
FastAPI自动生成接口文档,方便开发者调试,以及接口分享.
核心依赖¶
- FastAPI 负责 web 部分
- SQLModel 负责ORM模型映射(
完美结合SQLAlchemy+Pydantic, 拥有
SQLAlchemy和Pydantic的所有功能) - Amis 负责Admin后台页面展示
项目组成¶
fastapi-amis-admin由三部分核心模块组成,其中amis, crud 可作为独立模块单独使用,admin基于前者共同构建.
amis: 基于baidu amis的pydantic数据模型构建库,用于快速生成/解析amisjson数据.crud: 基于FastAPI+Sqlalchemy, 用于快速构建Create,Read,Update,Delete通用API接口.admin: 启发自Django-Admin, 结合amis+crud, 用于快速构建Web Admin管理后台.
安装¶
pip install fastapi_amis_admin
注意¶
sqlmodel目前暂不支持sqlalchemy 2.0+, 如果你使用sqlalchemy 2.0+创建模型, 则不可同时使用sqlmodel.fastapi-amis-admin>=0.6.0版本以后,sqlmodel不再是必须依赖库,如果你使用sqlmodel创建模型, 可以通过以下命令安装.
pip install fastapi_amis_admin[sqlmodel]
简单示例¶
from fastapi import FastAPI
from fastapi_amis_admin.admin.settings import Settings
from fastapi_amis_admin.admin.site import AdminSite
# 创建FastAPI应用
app = FastAPI()
# 创建AdminSite实例
site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'))
# 挂载后台管理系统
site.mount_app(app)
if __name__ == '__main__':
import uvicorn
uvicorn.run(app)
运行程序¶
uvicorn main:app <--port 端口号> <--reload>
模型管理示例¶
创建模型¶
- 支持
SQLModel模型的、SQLAlchemy模型、SQLAlchemy 2.0模型 - 方式一: 通过
SQLModel创建模型.
from sqlmodel import SQLModel
from fastapi_amis_admin.models.fields import Field
class Base(SQLModel):
pass
# 创建SQLModel模型,详细请参考: https://sqlmodel.tiangolo.com/
class Category(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True, nullable=False)
name: str = Field(title='CategoryName', max_length=100, unique=True, index=True, nullable=False)
description: str = Field(default='', title='Description', max_length=255)
- 方式二: 通过
SQLAlchemy创建模型.
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
# 创建SQLAlchemy模型,详细请参考: https://docs.sqlalchemy.org/en/14/orm/tutorial.html
class Category(Base):
__tablename__ = 'category'
__pydantic_model__ = CategorySchema # 指定模型对应的Schema类.省略可自动生成,但是建议指定.
id = Column(Integer, primary_key=True, nullable=False)
name = Column(String(100), unique=True, index=True, nullable=False)
description = Column(String(255), default='')
- 方式三: 通过
SQLAlchemy 2.0创建模型.
from sqlalchemy import String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
# 创建SQLAlchemy 2.0模型,详细请参考: https://docs.sqlalchemy.org/en/20/orm/quickstart.html
class Category(Base):
__tablename__ = "category"
__pydantic_model__ = CategorySchema # 指定模型对应的Schema类.省略可自动生成,但是建议指定.
id: Mapped[int] = mapped_column(primary_key=True, nullable=False)
name: Mapped[str] = mapped_column(String(100), unique=True, index=True, nullable=False)
description: Mapped[str] = mapped_column(String(255), default="")
- 如果你通过
sqlalchemy创建模型,建议同时创建一个对应的pydantic模型,并且设置orm_mode=True.
from pydantic import BaseModel, Field
class CategorySchema(BaseModel):
id: Optional[int] = Field(default=None, primary_key=True, nullable=False)
name: str = Field(title="CategoryName")
description: str = Field(default="", title="CategoryDescription")
class Config:
orm_mode = True
注册模型管理¶
from fastapi import FastAPI
from sqlmodel import SQLModel
from fastapi_amis_admin.admin.settings import Settings
from fastapi_amis_admin.admin.site import AdminSite
from fastapi_amis_admin.admin import admin
# 创建FastAPI应用
app = FastAPI()
# 创建AdminSite实例
site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'))
# 注册ModelAdmin
@site.register_admin
class CategoryAdmin(admin.ModelAdmin):
page_schema = '分类管理'
# 配置管理模型
model = Category
# 挂载后台管理系统
site.mount_app(app)
# 创建初始化数据库表
@app.on_event("startup")
async def startup():
await site.db.async_run_sync(Base.metadata.create_all, is_session=False)
if __name__ == '__main__':
import uvicorn
uvicorn.run(app)
表单管理示例¶
from typing import Any
from fastapi import FastAPI
from pydantic import BaseModel
from starlette.requests import Request
from fastapi_amis_admin.amis.components import Form
from fastapi_amis_admin.admin import admin
from fastapi_amis_admin.admin.settings import Settings
from fastapi_amis_admin.admin.site import AdminSite
from fastapi_amis_admin.crud.schema import BaseApiOut
from fastapi_amis_admin.models.fields import Field
# 创建FastAPI应用
app = FastAPI()
# 创建AdminSite实例
site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'))
# 注册FormAdmin
@site.register_admin
class UserLoginFormAdmin(admin.FormAdmin):
page_schema = 'UserLoginForm'
# 配置表单信息, 可省略
form = Form(title='这是一个测试登录表单', submitText='登录')
# 创建表单数据模型
class schema(BaseModel):
username: str = Field(..., title='用户名', min_length=3, max_length=30)
password: str = Field(..., title='密码')
# 处理表单提交数据
async def handle(self, request: Request, data: BaseModel, **kwargs) -> BaseApiOut[Any]:
if data.username == 'amisadmin' and data.password == 'amisadmin':
return BaseApiOut(msg='登录成功!', data={'token': 'xxxxxx'})
return BaseApiOut(status=-1, msg='用户名或密码错误!')
# 挂载后台管理系统
site.mount_app(app)
if __name__ == '__main__':
import uvicorn
uvicorn.run(app)
使用命令行¶
# 安装命令行拓展
pip install fastapi_amis_admin[cli]
# 查看帮助
faa --help
# 初始化一个`FastAPI-Amis-Admin`项目
faa new project_name --init
# 初始化一个`FastAPI-Amis-Admin`应用
faa new app_name
# 快速运行项目
faa run
界面预览¶
- Open
http://127.0.0.1:8000/admin/in your browser:

- Open
http://127.0.0.1:8000/admin/docsin your browser:

相关项目¶
Amis-Admin-Theme-Editor:FastAPI-Amis-Admin的主题编辑器。 允许添加自定义css样式和应用主题,变量改变及时生效.FastAPI-User-Auth: 一个简单而强大的FastAPI用户RBAC认证与授权库.FastAPI-Scheduler: 一个基于APScheduler的简单定时任务管理FastAPI拓展库.FastAPI-Config: 一个基于FastAPI-Amis-Admin的可视化动态配置管理拓展包.FastAPI-Amis-Admin-Demo: 一个FastAPI-Amis-Admin应用程序示例.FastAPI-User-Auth-Demo: 一个FastAPI-User-Auth应用程序示例.
许可协议¶
fastapi-amis-admin基于Apache2.0开源免费使用,可以免费用于商业用途,但请在展示界面中明确显示关于FastAPI-Amis-Admin的版权信息.
鸣谢¶
感谢以下开发者对 FastAPI-Amis-Admin 作出的贡献: