Custom Development Guide
See Backend Development and Frontend Development for more details.
Backend Custom Development
Use the plugin-based architecture under backend/app/plugin/. The system auto-discovers and registers all compliant routes.
Steps
- Create
module_yourfeature/underbackend/app/plugin/ - Write
model.py→schema.py→crud.py→service.py→controller.py - Routes auto-register — no manual config
Model Example
python
from sqlalchemy import Column, Integer, String
from app.core.database import Base
class YourModel(Base):
__tablename__ = "your_table"
id = Column(Integer, primary_key=True, index=True)
name = Column(String(255), nullable=False)Controller Example
python
from fastapi import APIRouter, Depends, Path
from fastapi.responses import JSONResponse
from app.common.response import SuccessResponse
from app.core.router_class import OperationLogRoute
from app.core.dependencies import AuthPermission
from app.api.v1.module_system.auth.schema import AuthSchema
from .service import YourFeatureService
YourFeatureRouter = APIRouter(
route_class=OperationLogRoute,
prefix="/yourcontroller",
tags=["Your Feature"],
)
@YourFeatureRouter.get("/detail/{id}", summary="Get Detail")
async def get_detail(
id: int = Path(..., description="Feature ID"),
auth: AuthSchema = Depends(AuthPermission(["module_yourfeature:yourcontroller:detail"])),
) -> JSONResponse:
result = await YourFeatureService.detail_service(id=id, auth=auth)
return SuccessResponse(data=result)Code Generator
Built-in code generator auto-generates CRUD code from database schema:
- Login → "Code Generation" module
- Import table structure
- Configure parameters
- Generate
Frontend Custom Development
Web
- Create API file in
frontend/web/src/api/ - Create page component in
frontend/web/src/views/ - Register route (static or dynamic via backend menu)
Mobile
- Create API file in
frontend/app/src/api/ - Create page component in
frontend/app/src/pages/ - Configure route in
pages.json
Development Notes
- Permission: All APIs require
AuthPermission - Validation: Use Pydantic schemas for input validation
- Error handling: Use project's unified exception handling
- Logging: Use
OperationLogRoutefor critical operations - Code style: Backend uses ruff, frontend uses ESLint + Prettier