Skip to content

Admin Panel

The FastAPI boilerplate comes with a pre-configured web-based admin interface powered by CRUDAdmin that provides instant database management capabilities. Learn how to access, configure, and customize the admin panel for your development and production needs.

Powered by CRUDAdmin: This admin panel is built with CRUDAdmin, a modern admin interface generator for FastAPI applications.

What You'll Learn

Admin Panel Overview

Your FastAPI boilerplate includes a fully configured admin interface that's ready to use out of the box. The admin panel automatically provides web-based management for your database models without requiring any additional setup.

What's Already Configured:

  • Complete admin interface mounted at /admin
  • User, Tier, and Post models already registered
  • Automatic form generation and validation
  • Session management with configurable backends
  • Security features and access controls

Accessing the Admin Panel:

  1. Start your application: uv run fastapi dev
  2. Navigate to: http://localhost:8000/admin
  3. Login with default credentials (configured via environment variables)

Pre-Registered Models

The boilerplate comes with three models already set up in the admin interface:

User Management

# Already registered in your admin
admin.add_view(
    model=User,
    create_schema=UserCreate,
    update_schema=UserUpdate,
    allowed_actions={"view", "create", "update"},
    password_transformer=password_transformer,  # Automatic password hashing
)

Features:

  • Create and manage application users
  • Automatic password hashing with bcrypt
  • User profile management (name, username, email)
  • Tier assignment for subscription management

Tier Management

# Subscription tiers for your application
admin.add_view(
    model=Tier, 
    create_schema=TierCreate, 
    update_schema=TierUpdate, 
    allowed_actions={"view", "create", "update", "delete"}
)

Features:

  • Manage subscription tiers and pricing
  • Configure rate limits per tier
  • Full CRUD operations available

Content Management

# Post/content management
admin.add_view(
    model=Post,
    create_schema=PostCreateAdmin,  # Special admin schema
    update_schema=PostUpdate,
    allowed_actions={"view", "create", "update", "delete"}
)

Features:

  • Manage user-generated content
  • Handle media URLs and content validation
  • Associate posts with users

Quick Start

1. Set Up Admin Credentials

Configure your admin login in your .env file:

# Admin Panel Access
ADMIN_USERNAME="your-admin-username"
ADMIN_PASSWORD="YourSecurePassword123!"

# Basic Configuration
CRUD_ADMIN_ENABLED=true
CRUD_ADMIN_MOUNT_PATH="/admin"

2. Start the Application

# Development
uv run fastapi dev

# The admin panel will be available at:
# http://localhost:8000/admin

3. Login and Explore

  1. Access: Navigate to /admin in your browser
  2. Login: Use the credentials from your environment variables
  3. Explore: Browse the pre-configured models (Users, Tiers, Posts)

Environment Configuration

The admin panel is configured entirely through environment variables, making it easy to adapt for different deployment environments.

Basic Settings

# Enable/disable admin panel
CRUD_ADMIN_ENABLED=true                    # Set to false to disable completely

# Admin interface path
CRUD_ADMIN_MOUNT_PATH="/admin"             # Change the URL path

# Admin user credentials (created automatically)
ADMIN_USERNAME="admin"                     # Your admin username
ADMIN_PASSWORD="SecurePassword123!"       # Your admin password

Session Management

# Session configuration
CRUD_ADMIN_MAX_SESSIONS=10                 # Max concurrent sessions per user
CRUD_ADMIN_SESSION_TIMEOUT=1440            # Session timeout (24 hours)
SESSION_SECURE_COOKIES=true                # HTTPS-only cookies

Production Security

# Security settings for production
ENVIRONMENT="production"                   # Enables HTTPS enforcement
CRUD_ADMIN_TRACK_EVENTS=true              # Log admin actions
CRUD_ADMIN_TRACK_SESSIONS=true            # Track session activity

Redis Session Storage

For production deployments with multiple server instances:

# Enable Redis sessions
CRUD_ADMIN_REDIS_ENABLED=true
CRUD_ADMIN_REDIS_HOST="localhost"
CRUD_ADMIN_REDIS_PORT=6379
CRUD_ADMIN_REDIS_DB=0
CRUD_ADMIN_REDIS_PASSWORD="your-redis-password"
CRUD_ADMIN_REDIS_SSL=false

How It Works

The admin panel integrates seamlessly with your FastAPI application through several key components:

Automatic Initialization

# In src/app/main.py - already configured
admin = create_admin_interface()

@asynccontextmanager
async def lifespan_with_admin(app: FastAPI):
    async with default_lifespan(app):
        if admin:
            await admin.initialize()  # Sets up admin database
        yield

# Admin is mounted automatically at your configured path
if admin:
    app.mount(settings.CRUD_ADMIN_MOUNT_PATH, admin.app)

Configuration Integration

# In src/app/admin/initialize.py - uses your existing settings
admin = CRUDAdmin(
    session=async_get_db,                      # Your database session
    SECRET_KEY=settings.SECRET_KEY,            # Your app's secret key
    mount_path=settings.CRUD_ADMIN_MOUNT_PATH, # Configurable path
    secure_cookies=settings.SESSION_SECURE_COOKIES,
    enforce_https=settings.ENVIRONMENT == EnvironmentOption.PRODUCTION,
    # ... all configured via environment variables
)

Model Registration

# In src/app/admin/views.py - pre-configured models
def register_admin_views(admin: CRUDAdmin):
    # Password handling for User model
    password_transformer = PasswordTransformer(
        password_field="password",
        hashed_field="hashed_password",
        hash_function=get_password_hash,  # Uses your app's password hashing
    )

    # Register your models with appropriate schemas
    admin.add_view(model=User, create_schema=UserCreate, ...)
    admin.add_view(model=Tier, create_schema=TierCreate, ...)
    admin.add_view(model=Post, create_schema=PostCreateAdmin, ...)

Development vs Production

Development Setup

For local development, minimal configuration is needed:

# .env for development
CRUD_ADMIN_ENABLED=true
ADMIN_USERNAME="admin"
ADMIN_PASSWORD="admin123"
ENVIRONMENT="local"

# Uses memory sessions (fast, no external dependencies)
CRUD_ADMIN_REDIS_ENABLED=false

Production Setup

For production deployments, enable additional security features:

# .env for production
CRUD_ADMIN_ENABLED=true
ADMIN_USERNAME="production-admin"
ADMIN_PASSWORD="VerySecureProductionPassword123!"
ENVIRONMENT="production"

# Redis sessions for scalability
CRUD_ADMIN_REDIS_ENABLED=true
CRUD_ADMIN_REDIS_HOST="your-redis-host"
CRUD_ADMIN_REDIS_PASSWORD="secure-redis-password"
CRUD_ADMIN_REDIS_SSL=true

# Enhanced security
SESSION_SECURE_COOKIES=true
CRUD_ADMIN_TRACK_EVENTS=true
CRUD_ADMIN_TRACK_SESSIONS=true

Getting Started Guide

1. Configuration - Environment Setup

Learn about all available environment variables and how to configure the admin panel for different deployment scenarios. Understand session backends and security settings.

Perfect for setting up development environments and preparing for production deployment.

2. Adding Models - Extend the Admin Interface

Discover how to register your new models with the admin interface. Learn from the existing User, Tier, and Post implementations to add your own models.

Essential when you create new database models and want them managed through the admin interface.

3. User Management - Admin Security

Understand how admin authentication works, how to create additional admin users, and implement security best practices for production environments.

Critical for production deployments where multiple team members need admin access.

What's Next

Ready to start using your admin panel? Follow this path:

  1. Configuration - Set up your environment variables and understand deployment options
  2. Adding Models - Add your new models to the admin interface
  3. User Management - Implement secure admin authentication

The admin panel is ready to use immediately with sensible defaults, and each guide shows you how to customize it for your specific needs.