mirror of
https://github.com/fastapi-admin/fastapi-admin.git
synced 2026-03-13 10:32:25 +08:00
add xlsx export
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
from fastapi import Depends
|
||||
|
||||
from . import login, other, index
|
||||
from . import login, site, index, other
|
||||
from ..depends import jwt_required
|
||||
from ..factory import app
|
||||
|
||||
app.include_router(login.router)
|
||||
app.include_router(other.router, dependencies=[Depends(jwt_required)])
|
||||
app.include_router(other.router)
|
||||
app.include_router(site.router, dependencies=[Depends(jwt_required)])
|
||||
app.include_router(index.router, dependencies=[Depends(jwt_required)])
|
||||
|
||||
@@ -1,21 +1,43 @@
|
||||
from fastapi import APIRouter
|
||||
import io
|
||||
|
||||
from ..factory import app
|
||||
import xlsxwriter
|
||||
from fastapi import APIRouter, Depends
|
||||
from starlette.responses import StreamingResponse, FileResponse
|
||||
from tortoise.contrib.pydantic import pydantic_model_creator
|
||||
from fastapi_admin.depends import QueryItem, get_model, get_query
|
||||
from fastapi_admin.factory import app
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get(
|
||||
'/home',
|
||||
'/{resource}/export'
|
||||
)
|
||||
async def home():
|
||||
return {
|
||||
'title': "Welcome to REST ADMIN"
|
||||
}
|
||||
async def export(
|
||||
resource: str,
|
||||
query: QueryItem = Depends(get_query),
|
||||
model=Depends(get_model)
|
||||
):
|
||||
qs = model.all()
|
||||
if query.where:
|
||||
qs = qs.filter(**query.where)
|
||||
resource = await app.get_resource(resource)
|
||||
result = await qs
|
||||
creator = pydantic_model_creator(model, include=resource.resource_fields.keys(), exclude=model._meta.m2m_fields)
|
||||
data = map(lambda x: creator.from_orm(x).dict(), result)
|
||||
|
||||
output = io.BytesIO()
|
||||
workbook = xlsxwriter.Workbook(output)
|
||||
worksheet = workbook.add_worksheet()
|
||||
for row, item in enumerate(data):
|
||||
col = 0
|
||||
for k, v in item.items():
|
||||
if row == 0:
|
||||
worksheet.write(row, col, k)
|
||||
worksheet.write(row + 1, col, v)
|
||||
col += 1
|
||||
|
||||
@router.get(
|
||||
'/site',
|
||||
)
|
||||
async def site():
|
||||
return app.site.dict(by_alias=True, exclude_unset=True)
|
||||
workbook.close()
|
||||
output.seek(0)
|
||||
|
||||
return StreamingResponse(output)
|
||||
|
||||
21
fastapi_admin/routes/site.py
Normal file
21
fastapi_admin/routes/site.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from fastapi import APIRouter
|
||||
|
||||
from ..factory import app
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get(
|
||||
'/home',
|
||||
)
|
||||
async def home():
|
||||
return {
|
||||
'title': "Welcome to REST ADMIN"
|
||||
}
|
||||
|
||||
|
||||
@router.get(
|
||||
'/site',
|
||||
)
|
||||
async def site():
|
||||
return app.site.dict(by_alias=True, exclude_unset=True)
|
||||
Reference in New Issue
Block a user