简介
FastAPI-admin 是一个基于fastapi和
tortoise-orm和rest-admin的后台管理面板。
FastAPI-admin 提供了开箱即用的 CRUD,只需少量的配置。
在线 demo 地址
https://fastapi-admin.long2ice.cn
- 用户名:
admin
- 密码:
123456
数据会每天进行重置。
预览
快速开始
本地运行样例
查看examples。
执行
git clone https://github.com/long2ice/fastapi-admin.git
.创建数据库
fastapi-admin
并且导入examples/example.sql
。执行
python setup.py install
。-
执行
env PYTHONPATH=./ DATABASE_URL=mysql://root:[email protected]:3306/fastapi-admin python3 examples/main.py
:INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Started reloader process [89005] INFO: Started server process [89009] INFO: Waiting for application startup. INFO: Tortoise-ORM startup connections: {'default': 'mysql://root:[email protected]:3306/fastapi-admin'} apps: {'models': {'models': ['examples.models'], 'default_connection': 'default'}} INFO: Tortoise-ORM started, {'default':
}, {'models': {'Category': , 'Product': , 'User': }} INFO: Tortoise-ORM generating schema INFO: Application startup complete. -
执行
cd front && npm install && npm run serve
:App running at: - Local: http://localhost:8080/ - Network: http://192.168.10.23:8080/ Note that the development build is not optimized. To create a production build, run yarn build.
打开http://localhost:8080/
进行体验。
后端代码集成
pip3 install fastapi-admin
fast_app = FastAPI()
register_tortoise(fast_app, config=TORTOISE_ORM, generate_schemas=True)
fast_app.mount('/admin', admin_app)
@fast_app.on_event('startup')
async def startup():
admin_app.init(
user_model='User',
tortoise_app='models',
admin_secret='test',
permission=True,
site=Site(...)
)
前端
执行cd front && cp .env.example .env
并且对应更改,然后执行npm run serve
。
特性
内置授权与权限控制
继承 fastapi_admin.models.User
增加自定义自动,必须包含is_active
和is_superuser
。
必须导入Permission
和Role
,导入之后什么也不用做。
from fastapi_admin.models import User as AdminUser, Permission, Role
class AdminUser(AdminUser,Model):
is_active = fields.BooleanField(default=False, description='Is Active')
is_superuser = fields.BooleanField(default=False, description='Is Superuser')
status = fields.IntEnumField(Status, description='User Status')
created_at = fields.DatetimeField(auto_now_add=True)
updated_at = fields.DatetimeField(auto_now=True)
然后注册权限和创建超级管理员:
$ fastapi-admin -h
usage: fastapi-admin [-h] -c CONFIG {register_permissions,createsuperuser} ...
optional arguments:
-h, --help show this help message and exit
-c CONFIG, --config CONFIG
Tortoise-orm config dict import path,like settings.TORTOISE_ORM.
subcommands:
{register_permissions,createsuperuser}
设置permission=True
激活权限控制模块:
admin_app.init(
user_model='AdminUser',
admin_secret='123456',
models='examples.models',
permission=True,
site=Site(
...
)
)
枚举支持
在 tortoise-orm 定义枚举字段时,可以继承fastapi_admin.enums.EnumMixin
并且实现choices()
方法,FastAPI-admin 会自动读取并且在前端渲染一个select
控件。
class Status(EnumMixin, IntEnum):
on = 1
off = 2
@classmethod
def choices(cls):
return {
cls.on: 'ON',
cls.off: 'OFF'
}
友好的字段名
FastAPI-admin 会自动从字段读取description
属性并且展示在前端。
外键支持
如果外键未在menu.raw_id_fields
定义,FastAPI-admin 会自动读取所有的关联记录并且在前端以Model.__str__
渲染一个select
控件。
多对多支持
FastAPI-admin 会自动读取所有的关联记录并且在前端以Model.__str__
渲染一个多选select
控件,仅限于编辑界面。
json 支持
FastAPI-admin 会对JSONFIeld
以 json 控件渲染。
搜索
定义 menu.search_fields
会渲染出一个搜索框。
Xlsx 导出
FastAPI-admin 可导出 xlsx 文件,只需在menu
设置export=True
。
批量操作
当前 FastAPI-admin 支持内置的delete_all
,如果你需要自定义:
-
传入
bulk_actions
到Menu
,示例:Menu( bulk_actions=[{ 'value': 'delete', # fastapi path参数 'text': 'delete_all', # 前端展示的 }] )
-
编写 fastapi 路由,示例:
from fastapi_admin.schemas import BulkIn from fastapi_admin.factory import app as admin_app @admin_app.post( '/rest/{resource}/bulk/delete' # `delete` is defined in Menu before. ) async def bulk_delete( bulk_in: BulkIn, model=Depends(get_model) ): await model.filter(pk__in=bulk_in.pk_list).delete() return {'success': True}
部署
- 使用
gunicorn+uvicorn
或者参考https://fastapi.tiangolo.com/deployment。 -
cp .env.example .env
对应修改,在front
目录执行npm run build
,然后将dist
中所有文件拷贝到服务器并用nginx
部署。
感谢
- fastapi ,high performance
async api framework. - tortoise-orm ,familiar
asyncio ORM for python. - rest-admin,restful Admin
Dashboard Based on Vue and Boostrap 4.
开源许可
本项目遵从 MIT开源许可。