API Routes Generator - Advanced Usage¶
This guide covers advanced customization for complex use cases.
Custom Actions¶
Create custom endpoints beyond standard CRUD operations:
from fastedgy.api_route_model.actions import BaseApiRouteAction
from fastapi import APIRouter, HTTPException
class ActivateApiRouteAction(BaseApiRouteAction):
name = "activate"
@classmethod
def register_route(cls, router, model_cls, options):
async def activate_item(item_id: int, active: bool = True):
item = await model_cls.objects.get(id=item_id)
if not item:
raise HTTPException(status_code=404, detail="Item not found")
item.is_active = active
await item.update()
return item
router.add_api_route(
path=f"/{item_id}/activate",
endpoint=activate_item,
methods=["POST"],
**options
)
# Register and use
from fastedgy.dependencies import get_service
from fastedgy.api_route_model.actions import ApiRouteActionRegistry
arar = get_service(ApiRouteActionRegistry)
arar.register_action(ActivateApiRouteAction)
@api_route_model(activate=True)
class Product(Model):
name = fields.CharField(max_length=200)
is_active = fields.BooleanField(default=True)
View Transformers¶
FastEdgy provides a comprehensive View Transformers system for customizing data at different stages of the request lifecycle.
For complete documentation including all transformer types, registration patterns, and advanced examples, see the dedicated View Transformers section.
Route Customization¶
Customize generated endpoints:
@api_route_model(
list={
"path": "/all-products",
"summary": "Get all products",
"dependencies": [Depends(rate_limit)],
},
create={
"dependencies": [Depends(admin_required)],
"status_code": 201,
},
delete={
"dependencies": [Depends(super_admin_required)],
},
export=False # Disable export endpoint
)
class Product(Model):
name = fields.CharField(max_length=200)
price = fields.DecimalField(max_digits=10, decimal_places=2)
Admin Routes¶
Separate admin endpoints with different permissions:
from fastedgy.api_route_model import admin_api_route_model
@admin_api_route_model()
class AdminUser(Model):
username = fields.CharField(max_length=150)
is_staff = fields.BooleanField(default=False)
# Register separately
from fastedgy.api_route_model.router import register_admin_api_route_models
admin_router = APIRouter(prefix="/admin/api", dependencies=[Depends(admin_required)])
register_admin_api_route_models(admin_router)
app.include_router(admin_router)