FastAPI-Amis-Adminfastapi 管理后臺框架
fastapi-amis-admin 是一個擁有高性能、高效率、易拓展的 fastapi 管理后臺框架,啟發(fā)自 Django-Admin,并且擁有不遜色于Django-Admin的強大功能。
fastapi-amis-admin 基于fastapi+amis開發(fā)的高性能并且高效率 web-admin 框架,使用 Python 3.6+ 并基于標準的 Python 類型提示。
fastapi-amis-admin開發(fā)的初衷是為了完善fastapi應用生態(tài), 為fastapi web應用程序快速生成一個可視化管理后臺. fastapi-amis-admin遵循Apache2.0協(xié)議免費開源, 但是為了更好的長期運營與維護此項目, fastapi-amis-admin非常希望能夠得到大家的贊助與支持.
關鍵特性
-
性能極高:基于FastAPI, 可享受FastAPI的全部優(yōu)勢。
-
效率更快:完善的編碼類型提示, 代碼可重用性更高.
-
支持異步和同步混合編寫:
ORM基于SQLModel+Sqlalchemy, 可自由定制數(shù)據庫類型, 支持同步及異步模式, 可拓展性強. -
前后端分離: 前端由
Amis渲染, 后端接口由fastapi-amis-admin自動生成, 接口可重復利用. -
可拓展性強: 后臺頁面支持
Amis頁面及普通html頁面,開發(fā)者可以很方便的自由定制界面. -
自動生成API文檔: 由
FastAPI自動生成接口文檔,方便開發(fā)者調試,以及接口分享.
核心依賴
- Fastapi 負責 web 部分
- SQLModel 負責ORM模型映射(完美結合SQLAlchemy+Pydantic, 擁有
SQLAlchemy和Pydantic的所有功能) - Amis 負責Admin后臺頁面展示
項目組成
fastapi-amis-admin由三部分核心模塊組成,其中amis, fastapi-sqlmodel-crud 可作為獨立模塊單獨使用,amis_admin基于前者共同構建.
-
amis: 基于baidu amis的pydantic數(shù)據模型構建庫,用于快速生成/解析amisjson數(shù)據. -
fastapi-sqlmodel-crud: 基于FastAPI+SQLModel, 用于快速構建Create,Read,Update,Delete通用API接口. -
amis_admin: 啟發(fā)自Django-Admin, 結合amis+fastapi-sqlmodel-crud, 用于快速構建Web Admin管理后臺.
安裝
pip install fastapi_amis_admin
簡單示例
from fastapi import FastAPI from fastapi_amis_admin.amis_admin.settings import Settings from fastapi_amis_admin.amis_admin.site import AdminSite # 創(chuàng)建FastAPI應用 app = FastAPI() # 創(chuàng)建AdminSite實例 site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///admisadmin.db')) # 掛載后臺管理系統(tǒng) site.mount_app(app) if __name__ == '__main__': import uvicorn uvicorn.run(app, debug=True)
模型管理示例
from fastapi import FastAPI from sqlmodel import SQLModel from fastapi_amis_admin.amis_admin.settings import Settings from fastapi_amis_admin.amis_admin.site import AdminSite from fastapi_amis_admin.amis_admin import admin from fastapi_amis_admin.models.fields import Field # 創(chuàng)建FastAPI應用 app = FastAPI() # 創(chuàng)建AdminSite實例 site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///admisadmin.db')) # 先創(chuàng)建一個SQLModel模型,詳細請參考: https://sqlmodel.tiangolo.com/ class Category(SQLModel, table=True): id: int = Field(default=None, primary_key=True, nullable=False) name: str = Field(title='CategoryName') description: str = Field(default='', title='Description') # 注冊ModelAdmin @site.register_admin class CategoryAdmin(admin.ModelAdmin): page_schema = '分類管理' # 配置管理模型 model = Category # 掛載后臺管理系統(tǒng) site.mount_app(app) # 創(chuàng)建初始化數(shù)據庫表 @app.on_event("startup") async def startup(): await site.create_db_and_tables() if __name__ == '__main__': import uvicorn uvicorn.run(app, debug=True)
表單管理示例
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.amis_admin import admin from fastapi_amis_admin.amis_admin.settings import Settings from fastapi_amis_admin.amis_admin.site import AdminSite from fastapi_amis_admin.crud.schema import BaseApiOut from fastapi_amis_admin.models.fields import Field # 創(chuàng)建FastAPI應用 app = FastAPI() # 創(chuàng)建AdminSite實例 site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///admisadmin.db')) # 注冊FormAdmin @site.register_admin class UserLoginFormAdmin(admin.FormAdmin): page_schema = 'UserLoginForm' # 配置表單信息, 可省略 form = Form(title='這是一個測試登錄表單', submitText='登錄') # 創(chuàng)建表單數(shù)據模型 class schema(BaseModel): username: str = Field(..., title='用戶名', min_length=3, max_length=30) password: str = Field(..., title='密碼') # 處理表單提交數(shù)據 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='用戶名或密碼錯誤!') # 掛載后臺管理系統(tǒng) site.mount_app(app) if __name__ == '__main__': import uvicorn uvicorn.run(app, debug=True)
界面預覽
- Open
http://127.0.0.1:8000/admin/in your browser
- Open
http://127.0.0.1:8000/admin/docsin your browser
