# fastapi-admin **Repository Path**: qtun_shanyingqing/fastapi-admin ## Basic Information - **Project Name**: fastapi-admin - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-21 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ============= FastAPI Admin ============= .. image:: https://img.shields.io/pypi/v/fastapi-admin.svg?style=flat :target: https://pypi.python.org/pypi/fastapi-admin .. image:: https://img.shields.io/github/license/long2ice/fastapi-admin :target: https://github.com/long2ice/fastapi-admin .. image:: https://github.com/long2ice/fastapi-admin/workflows/gh-pages/badge.svg :target: https://github.com/long2ice/fastapi-admin/actions?query=workflow:gh-pages .. image:: https://github.com/long2ice/fastapi-admin/workflows/pypi/badge.svg :target: https://github.com/long2ice/fastapi-admin/actions?query=workflow:pypi `中文文档 `_ Introduction ============ 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. Live Demo ========= Check a live Demo here `https://fastapi-admin.long2ice.cn `_. * username: ``admin`` * password: ``123456`` Data in database will restore every day. Screenshots =========== .. image:: https://github.com/long2ice/fastapi-admin/raw/master/images/login.png .. image:: https://github.com/long2ice/fastapi-admin/raw/master/images/list.png .. image:: https://github.com/long2ice/fastapi-admin/raw/master/images/view.png .. image:: https://github.com/long2ice/fastapi-admin/raw/master/images/create.png Requirements ============ * `FastAPI `_ framework as your backend framework. * `Tortoise-ORM `_ as your orm framework, by the way, which is best asyncio orm so far and I'm one of the contributors😋. Quick Start =========== Run Example Local ~~~~~~~~~~~~~~~~~ Look at `examples `_. 1. ``git clone https://github.com/long2ice/fastapi-admin.git``. 2. create database ``fastapi-admin`` and import from ``examples/example.sql``. 3. ``python setup.py install``. 4. ``env DATABASE_URL=mysql://root:123456@127.0.0.1:3306/fastapi-admin PYTHONPATH=./ python3 examples/main.py``,then you can see: .. code-block:: python 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': }, {'models': {'Category': , 'Product': , 'User': }} INFO: Tortoise-ORM generating schema INFO: Application startup complete. 5. ``cd front && npm install && npm run serve``,then you can see: .. code-block:: shell 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. Open ``http://localhost:8080/`` in browser and enjoy it! Backend Integration ~~~~~~~~~~~~~~~~~~~ .. code-block:: shell $ pip3 install fastapi-admin .. code-block:: python from fastapi_admin.factory import app as admin_app 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(...) ) Front ~~~~~ ``cd front && cp .env.example .env`` and modify,then just run ``npm run serve``. Features ======== Builtin Auth And Permissions Control ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Inherit ``fastapi_admin.models.User`` and add you own fields,must contains ``is_active`` and ``is_superuser``. .. code-block:: python from fastapi_admin.models import User as AdminUser 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 add ``fastapi_admin.models`` to ``Tortoise-ORM`` config, example: .. code-block:: python TORTOISE_ORM = { 'connections': { 'default': os.getenv('DATABASE_URL') }, 'apps': { 'models': { 'models': ['examples.models', 'fastapi_admin.models'], 'default_connection': 'default', } } } And set ``permission=True`` to active it: .. code-block:: python admin_app.init( user_model='AdminUser', admin_secret='123456', models='examples.models', permission=True, site=Site( ... ) ) And register permissions and createsuperuser: .. code-block:: shell $ 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} Enum Support ~~~~~~~~~~~~ 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. .. code-block:: python class Status(EnumMixin, IntEnum): on = 1 off = 2 @classmethod def choices(cls): return { cls.on: 'ON', cls.off: 'OFF' } Verbose Name ~~~~~~~~~~~~ FastAPI-Admin will auto read ``description`` defined in tortoise-orm model ``Field`` and display in front. ForeignKeyField Support ~~~~~~~~~~~~~~~~~~~~~~~ If ``ForeignKeyField`` not passed in ``menu.raw_id_fields``,FastAPI-Admin will get all related objects and display ``select`` in front with ``Model.__str__``. ManyToManyField Support ~~~~~~~~~~~~~~~~~~~~~~~ FastAPI-Admin will render ``ManyToManyField`` with multiple ``select`` in ``form`` edit with ``Model.__str__``. JSONField Render ~~~~~~~~~~~~~~~~ FastAPI-Admin will render ``JSONField`` with ``jsoneditor`` as beauty interface. Search Fields ~~~~~~~~~~~~~ Defined ``menu.search_fields`` in ``menu`` will render a search form by fields. Xlsx Export ~~~~~~~~~~~ FastAPI-Admin can export searched data to excel file when define ``export=True`` in ``menu``. Bulk Actions ~~~~~~~~~~~~ Current FastAPI-Admin support builtin bulk action ``delete_all``,if you want write your own bulk actions: 1. pass ``bulk_actions`` in ``Menu``,example: .. code-block:: python Menu( ... bulk_actions=[{ 'value': 'delete', # this is fastapi router path param. 'text': 'delete_all', # this will show in front. }] ) 2. write fastapi route,example: .. code-block:: python 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} Default Menus ~~~~~~~~~~~~~ Default, FastAPI-Admin provide default menus by your models, without doing tedious works. Deployment ========== 1. Deploy fastapi app by gunicorn+uvicorn or reference https://fastapi.tiangolo.com/deployment/. 2. ``cp .env.example .env`` and modify,run ``npm run build`` in ``front`` dir,then copy static files in ``dists`` to you server,deployment by ``nginx``. ThanksTo ======== * `fastapi `_ ,high performance async api framework. * `tortoise-orm `_ ,familiar asyncio ORM for python. * `rest-admin `_,restful Admin Dashboard Based on Vue and Boostrap 4. License ======= This project is licensed under the `MIT `_ License.