Files
fastapi-admin/docs/features.md
2020-09-21 17:50:02 +08:00

215 lines
5.1 KiB
Markdown

## Builtin Auth And Permissions Control
You should inherit `fastapi_admin.models.AbstractUser`,`fastapi_admin.models.AbstractPermission`,`fastapi_admin.models.AbstractRole` and add extra fields.
```python
from fastapi_admin.models import AbstractUser,AbstractPermission,AbstractRole
class AdminUser(AbstractUser):
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)
class Permission(AbstractPermission):
"""
must inheritance AbstractPermission
"""
class Role(AbstractRole):
"""
must inheritance AbstractRole
"""
users = fields.ManyToManyField("models.AdminUser")
class AdminLog(AbstractAdminLog):
"""
must inheritance AbstractAdminLog
"""
users = fields.ManyToManyField("models.AdminUser")
```
And set `permission=True` to active it:
```python
await admin_app.init(
...
permission=True,
site=Site(
...
),
)
```
And createsuperuser:
```shell
> fastapi-admin -h
usage: fastapi-admin [-h] -c CONFIG [--version] {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.
--version, -V show the version
subcommands:
{createsuperuser}
```
## Custom Login
You can write your own login view logic:
```python
await admin_app.init(
...
login_view="examples.routes.login"
)
```
And must return json like:
```json
{
"user": {
"username": "admin",
"is_superuser": false,
"avatar": "https://avatars2.githubusercontent.com/u/13377178?s=460&u=d150d522579f41a52a0b3dd8ea997e0161313b6e&v=4"
},
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoyfQ.HSlcYkOEQewxyPuaqcVwCcw_wkbLB50Ws1-ZxfPoLAQ"
}
```
## 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.
```python
class Status(EnumMixin, IntEnum):
on = 1
off = 2
@classmethod
def choices(cls):
return {
cls.on: 'ON',
cls.off: 'OFF'
}
```
## Help Text
FastAPI-Admin will auto read `description` defined in tortoise-orm model
`Field` and display in front with form help text.
## 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:
```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:
```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.
## Table Variant
You can define `RowVariant` and `CellVariants` in `computed` of `tortoise-orm`, which will effect table rows and cells variant.
```python
class User(AbstractUser):
last_login = fields.DatetimeField(description="Last Login", default=datetime.datetime.now)
avatar = fields.CharField(max_length=200, default="")
intro = fields.TextField(default="")
created_at = fields.DatetimeField(auto_now_add=True)
def __str__(self):
return f"{self.pk}#{self.username}"
def rowVariant(self) -> str:
if not self.is_active:
return "warning"
return ""
def cellVariants(self) -> dict:
if self.is_active:
return {
"intro": "info",
}
return {}
class PydanticMeta:
computed = ("rowVariant", "cellVariants")
```
## Admin log
You can log each admin action like `delete`,`create` and `update`,just set `admin_log=True` in `admin_app.init()` and inherit `fastapi_admin.models.AbstractAdminLog`.
## Import from excel
You can enable `import` by set `import_=True` in `Menu` definition, and data format must same as `Model` fields.