FastAPI-Amis-Admin: 一个拥有高性能,高效率,易拓展的 fastapi 管理后台框架 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
atomi
V2EX    Python

FastAPI-Amis-Admin: 一个拥有高性能,高效率,易拓展的 fastapi 管理后台框架

  •  2
     
  •   atomi 2022-03-24 09:42:31 +08:00 6217 次点击
    这是一个创建于 1344 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目介绍

    FastAPI-Amis-Admin

    fastapi-amis-admin 是一个拥有高性能,高效率,易拓展的 fastapi 管理后台框架.
    启发自 Django-Admin,并且拥有不逊色于 Django-Admin 的强大功能.

    Pytest Package version Downloads Chat on Gitter 229036692

    源码 在线演示 文档 文档打不开?


    fastapi-amis-admin是一个基于fastapi+amis开发的高性能并且高效率 web-admin 框架,使用 Python 3.7+ 并基于标准的 Python 类型提示. fastapi-amis-admin开发的初衷是为了完善fastapi应用生态, 为fastapi web 应用程序快速生成一个可视化管理后台. fastapi-amis-admin遵循Apache2.0协议免费开源, 但是为了更好的长期运营与维护此项目, fastapi-amis-admin非常希望能够得到大家的赞助与支持.

    关键特性

    • 性能极高:基于FastAPI, 可享受FastAPI的全部优势.

    • 效率更快:完善的编码类型提示, 代码可重用性更高.

    • 支持异步和同步混合编写: ORM基于SQLModel+Sqlalchemy, 可自由定制数据库类型, 支持同步及异步模式, 可拓展性强.

    • 前后端分离: 前端由Amis渲染, 后端接口由fastapi-amis-admin自动生成, 接口可重复利用.

    • 可拓展性强: 后台页面支持Amis页面及普通html页面,开发者可以很方便的自由定制界面.

    • 自动生成 API 文档: 由FastAPI自动生成接口文档,方便开发者调试,以及接口分享.

    核心依赖

    项目组成

    fastapi-amis-admin由三部分核心模块组成,其中amis, fastapi-sqlmodel-crud 可作为独立模块单独使用,amis_admin基于前者共同构建.

    • amis: 基于baidu amispydantic数据模型构建库,用于快速生成 /解析amis json 数据.
    • fastapi-sqlmodel-crud: 基于FastAPI+SQLModel, 用于快速构建 Create,Read,Update,Delete 通用 API 接口.
    • amis_admin: 启发自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 # 创建 FastAPI 应用 app = FastAPI() # 创建 AdminSite 实例 site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqite:///admisadmin.db')) # 挂载后台管理系统 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 # 创建 FastAPI 应用 app = FastAPI() # 创建 AdminSite 实例 site = AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///admisadmin.db')) # 先创建一个 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 # 挂载后台管理系统 site.mount_app(app) # 创建初始化数据库表 @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 # 创建 FastAPI 应用 app = FastAPI() # 创建 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='登录') # 创建表单数据模型 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, debug=True) 

    界面预览

    • Open http://127.0.0.1:8000/admin/ in your browser:

    ModelAdmin

    • Open http://127.0.0.1:8000/admin/docs in your browser:

    Docs

    未来计划

    • bug 修复,细节完善.
    • 完善用户教程文档.
    • 不断拓展与完善核心功能.

    许可协议

    • fastapi-amis-admin基于Apache2.0开源免费使用,可以免费用于商业用途,但请在展示界面中明确显示关于 FastAPI-Amis-Admin 的版权信息.
    12 条回复    2022-04-07 13:35:17 +08:00
    xabcstack
        1
    xabcstack  
       2022-03-24 09:49:17 +08:00
    点赞
    so1n
        2
    so1n  
       2022-03-24 10:27:14 +08:00
    SQLmodel 支持异步了吗?看了代码好多像都是 async 里面写的都是阻塞函数
    xooass
        3
    xooass  
       2022-03-24 10:29:43 +08:00
    点了进去后发现我已经 stats 过了
    jackleeorce3615
        4
    jackleeforce3615  
       2022-03-24 10:59:35 +08:00
    点赞,不过 FastAPI 的作者好像也有一个类似的项目: https://github.com/tiangolo/full-stack-fastapi-postgresql
    atomi
        5
    atomi  
    OP
       2022-03-24 11:17:40 +08:00
    @so1n SQLModel 支持 sqlalchemy 全部功能, 异步当然支持, 你可能没有认真看文档和代码哦...
    atomi
        6
    atomi  
    OP
       2022-03-24 11:23:24 +08:00
    @jackleeforce3615 两个不一样哦, 区别很大, 作者这个是一个完整的项目, 要利用起来需要研究里面的代码在这个基础上面修改. FastAPI-Amis-Admin 是一个类似 Django-Admin 的 python 库, 直接 pip 安装就可以使用,具体的内部实现代码可研究也可以忽略, 而且功能上不逊色于 Django-Admin.
    so1n
        7
    so1n  
       2022-03-24 11:59:35 +08:00
    @atomi 但是 asyncsession 执行的返回结果不是一个 model 把
    atomi
        8
    atomi  
    OP
       2022-03-24 13:16:01 +08:00
    @so1n AsyncSession 实现的方法太多了,你说的"执行的返回结果不是一个 model",`scalar`和`scalars`方法是你想要的效果吗?而且 sqlalchemy 一些不具备的特性, SQLModel 是 sqlalchemy+Pydantic 结合升级加强了很多特性,模型定义,数据校验,序列化,反序列化都非常简洁. 你可以阅读一下 SQLModel 和 sqlalchemy 的官方文档, SQLModel 文档关于异步的文档没有完善, 但是 sqlalchemy 的全部用法都是支持的, 具体效果你可以编写代码来验证.
    ziding
        9
    ziding  
       2022-03-31 11:00:51 +08:00
    感觉和 [sqladmin]( https://github.com/aminalaee/sqladmin) 区别不大,有没有特性对比表?
    ziding
        10
    ziding  
       2022-03-31 11:12:46 +08:00
    demo 不能正常添加记录,提示是成功的……
    atomi
        11
    atomi  
    OP
       2022-04-01 23:18:31 +08:00
    @ziding 在线 demo 是对数据库进行了保护,数据是只读的,无法修改.可以在 github 下载[demo]( https://github.com/amisadmin/fastapi_amis_admin_demo)代码到本地体验数据修改相关的功能.

    `fastapi-amis-admin`和`sqladmin`,`fastapi-admin`都是基于 fastapi 的后台管理框架,区别是支持的功能丰富度不一样,`fastapi-amis-admin`支持的功能最丰富.此外,最大的区别是`sqladmin`,`fastapi-admin`后台页面是基于服务器模板渲染, `fastapi-amis-admin`后台页面是基于 amis 实现客户端浏览器解析服务器返回的 json 生成页面.
    ziding
        12
    ziding  
       2022-04-07 13:35:17 +08:00
    @atomi 但是添加数据的提示是成功的,要是提示失败也是 OK 的。
    下载了代码,测试了一下,感觉还可以,我找个项目用用看
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4194 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 01:02 PVG 09:02 LAX 17:02 JFK 20:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86