FastAPI-admin is a admin dashboard based on fastapi and tortoise-orm and rest-admin.
FastAPI-admin provide crud feature out-of-the-box with just a few config.
Check a live Demo here https://fastapi-admin.long2ice.cn.
- username:
admin - password:
123456
Data in database will restore every day.
Look at examples.
git clone https://github.com/long2ice/fastapi-admin.git.- create database
fastapi-adminand import fromexamples/example.sql. pip install -r requirements.txt.cd examples && python3 main.py,then you can see:
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:123456@127.0.0.1:3306/fastapi-admin'}
apps: {'models': {'models': ['examples.models'], 'default_connection': 'default'}}
INFO: Tortoise-ORM started, {'default': <tortoise.backends.mysql.client.MySQLClient object at 0x110ed6760>}, {'models': {'Category': <class 'examples.models.Category'>, 'Product': <class 'examples.models.Product'>, 'User': <class 'examples.models.User'>}}
INFO: Tortoise-ORM generating schema
INFO: Application startup complete.That's all,enjoy it!
Only you should do is runing a fastapi app and mount admin app from fastapi-admin,then call init().
cp .env.development.local.example .env and modify,then just run cd front && npm run serve,more reference in rest-admin.
Inherit fastapi_admin.models.User and add you own fields,must contains is_active and is_superuser.
And you must import Permission and Role, just import and do nothing:
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)Then register permissions and createsuperuser:
> 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}And set permission=True to active it:
admin_app.init(
user_model='AdminUser',
admin_secret='123456',
models='examples.models',
permission=True,
site=Site(
...
)
)When you define a enum field of tortoise-orm,like IntEnumField,you can inherit fastapi_admin.enums.EnumMixin and impl choices() method,
FastAPI-admin will auto read and display and render a select widget in front.
class Status(EnumMixin, IntEnum):
on = 1
off = 2
@classmethod
def choices(cls):
return {
cls.on: 'ON',
cls.off: 'OFF'
}FastAPI-admin will auto read description defined in tortoise-orm model Field and display in front.
If ForeignKeyField not passed in menu.raw_id_fields,FastAPI-admin will get all related objects and display select in front with Model.__str__.
FastAPI-admin will render ManyToManyField with multiple select in form edit with Model.__str__.
FastAPI-admin will render JSONField with jsoneditor as beauty interface.
Defined menu.search_fields in menu will render a search form by fields.
FastAPI-admin can export searched data to excel file when define {export : True} in menu.actions.
Current FastAPI-admin support builtin bulk action delete_all,if you want write your own bulk actions:
- pass
bulk_actionsinMenu,example:
Menu(
...
bulk_actions=[{
'value': 'delete', # this is fastapi router path param.
'text': 'delete_all', # this will show in front.
}]
)- write fastapi route,example:
from fastapi_admin.schemas import BulkIn
from fastapi_admin.factory import app as admin_app
@admin_app.post(
'/{resource}/bulk/delete' # delete is defined 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}- Deploy fastapi app by gunicorn+uvicorn or reference https://fastapi.tiangolo.com/deployment/.
- Run
npm run buildinfrontdir,then copy static files indiststo you server,deployment bynginx.
Note
Maybe you should config VUE_APP_API_URL, BASE_URL environment .etc in .env of front dir,just reference docs of rest-admin.
- fastapi ,high performance async api framework.
- tortoise-orm ,familiar asyncio ORM for python.
- rest-admin,restful Admin Dashboard Based on Vue and Boostrap 4.
This project is licensed under the MIT License.




