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