Quick Start
FastAPI-Admin
is easy to mount your FastAPI
app, just need a few configs.
Mount Admin App
First, you need mount the admin app from FastAPI-Admin
as a sub application of FastAPI
.
from fastapi_admin.app import app as admin_app
from fastapi import FastAPI
app = FastAPI()
app.mount("/admin", admin_app)
Configure Admin App
There are some configs to configure the admin app, and you need to configure it on startup of FastAPI
.
from fastapi_admin.app import app as admin_app
from fastapi_admin.providers.login import UsernamePasswordProvider
from examples.models import Admin
import aioredis
from fastapi import FastAPI
login_provider = UsernamePasswordProvider(
admin_model=Admin,
enable_captcha=True,
login_logo_url="https://preview.tabler.io/static/logo.svg"
)
app = FastAPI()
@app.on_event("startup")
async def startup():
redis = await aioredis.create_redis_pool("redis://localhost", encoding="utf8")
admin_app.configure(
logo_url="https://preview.tabler.io/static/logo-white.svg",
template_folders=[os.path.join(BASE_DIR, "templates")],
providers=[login_provider],
redis=redis,
)
The full list of configs and detail can be found in Configuration.
Define And Register Resource
There are three kinds of resources, which are Link
,Model
, and Dropdown
.
Link
The Link
will display a menu in sidebar with custom page or third page.
from fastapi_admin.app import app
from fastapi_admin.resources import Link
@app.register
class Home(Link):
label = "Home"
icon = "fas fa-home"
url = "/admin"
Model
Field
The Field
is used in Model
resource to define how to display and input every field in model page.
The Model
make a TortoiseORM model as a menu with CURD page.
from examples.models import Admin
from fastapi_admin.app import app
from fastapi_admin.file_upload import FileUpload
from fastapi_admin.resources import Field, Model
from fastapi_admin.widgets import displays, filters, inputs
upload = FileUpload(uploads=os.path.join(BASE_DIR, "static", "uploads"))
@app.register
class AdminResource(Model):
label = "Admin"
model = Admin
icon = "fas fa-user"
page_pre_title = "admin list"
page_title = "admin model"
filters = [
filters.Search(
name="username", label="Name", search_mode="contains", placeholder="Search for username"
),
filters.Date(name="created_at", label="CreatedAt"),
]
fields = [
"id",
"username",
Field(
name="password",
label="Password",
display=displays.InputOnly(),
input_=inputs.Password(),
),
Field(name="email", label="Email", input_=inputs.Email()),
Field(
name="avatar",
label="Avatar",
display=displays.Image(width="40"),
input_=inputs.Image(null=True, upload=upload),
),
"created_at",
]
Dropdown
The Dropdown
can contains both Link
and Model
, which can be nested.
from examples import enums
from examples.models import Category, Product
from fastapi_admin.app import app
from fastapi_admin.resources import Dropdown, Field, Model
from fastapi_admin.widgets import displays, filters
@app.register
class Content(Dropdown):
class CategoryResource(Model):
label = "Category"
model = Category
fields = ["id", "name", "slug", "created_at"]
class ProductResource(Model):
label = "Product"
model = Product
filters = [
filters.Enum(enum=enums.ProductType, name="type", label="ProductType"),
filters.Datetime(name="created_at", label="CreatedAt"),
]
fields = [
"id",
"name",
"view_num",
"sort",
"is_reviewed",
"type",
Field(name="image", label="Image", display=displays.Image(width="40")),
"body",
"created_at",
]
label = "Content"
icon = "fas fa-bars"
resources = [ProductResource, CategoryResource]
What's next?
That's all, you can run your app now. For more reference you can see Reference.
Or you can see full examples.