Metadata-Version: 2.4
Name: django-saas
Version: 0.1.0
Summary: The foundation for building a SaaS product with Django
Author-email: Hsiaoming Yang <me@lepture.com>
License: BSD-3-Clause
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Framework :: Django :: 5.0
Classifier: Framework :: Django :: 5.1
Classifier: Framework :: Django :: 5.2
Classifier: Framework :: Django :: 6.0
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Internet :: WWW/HTTP
Requires-Python: >=3.12
Requires-Dist: css-inline
Requires-Dist: django
Requires-Dist: djangorestframework
Requires-Dist: joserfc
Requires-Dist: requests
Description-Content-Type: text/markdown

# Django SaaS

A modular foundation for building multi-tenant SaaS products with Django.

## Features

- **Multi-Tenancy**: Flexible tenant discovery (Header, Path, Session).
- **Identity & Authentication**: Robust user management with Password and SSO (Google, GitHub, Apple) support.
- **Organization & RBAC**: Tenant-level organization with Members, Groups, and a global Permission/Role registry.
- **Custom Domains**: Support for custom domain management and verification.
- **API First**: Enhanced DRF integration with tenant-aware filters and permissions.
- **Developer Tools**: Pre-configured SKILLs for AI-assisted development.

## Install

```bash
pip install django-saas
```

## Configuration

Add the required apps to your Django project's `settings.py`:

```python
INSTALLED_APPS = [
    # ...
    'saas',
    'saas.identity',
    'saas.tenancy',
    'saas.sessions',
    'saas.tokens',
    'saas.domain',
    'saas.sso',
    'saas.drf',
]

AUTHENTICATION_BACKENDS = [
    'saas.identity.backends.ModelBackend',
    'saas.sso.backends.UserIdentityBackend',
    'django.contrib.auth.backends.ModelBackend',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # SaaS Middlewares
    'saas.middleware.HeaderTenantIdMiddleware',
    'saas.middleware.PathTenantIdMiddleware',
    'saas.middleware.SessionTenantIdMiddleware',
    'saas.middleware.TenantMiddleware',
    'saas.sessions.middleware.SessionRecordMiddleware',
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'saas.tokens.authentication.TokenAuthentication',
    ],
    'DEFAULT_SCHEMA_CLASS': 'saas.drf.spectacular.AutoSchema',
}
```

### URL Configuration

Include the SaaS URLs in your project's `urls.py`:

```python
from django.urls import include, path

urlpatterns = [
    path('api/', include('saas.api_urls')),
    path('sso/', include('saas.sso.auth_urls')),
]
```

## Documentation for AI Agents

This project includes specialized context for AI developers. If you are using an AI assistant, point it to `AGENTS.md` and the `skills/` directory for automated workflows.

## License

BSD-3-Clause