Flaxon 0.3.0 and Teloce-Py 0.3.0 are available on PyPI. Release instructions are maintained on this site; source links identify the framework snapshot. Check version and upgrade guidance.
Configuration
Generated projects: settings.py
Use Flaxon.from_settings("settings") in app.py. Both the application and
management.py read this same module. env.load() reads .env; existing process
environment variables take precedence. Only values read with env.str(),
env.bool(), or env.list() are taken from the environment in this workflow.
Do not assume every setting automatically maps to a FLAXON_ variable.
from pathlib import Path
from flaxon.config import env
BASE_DIR = Path(__file__).resolve().parent
env.load(BASE_DIR / ".env")
PROJECT_NAME = "project_manager"
DEBUG = env.bool("FLAXON_DEBUG", default=True)
SECRET_KEY = env.str("FLAXON_SECRET_KEY")
DATABASE_URL = env.str("DATABASE_URL", default=f"sqlite://{BASE_DIR / 'data/app.sqlite3'}")
ALLOWED_HOSTS = env.list("FLAXON_ALLOWED_HOSTS", default=["localhost", "127.0.0.1"])
CSRF_TRUSTED_ORIGINS = env.list("FLAXON_CSRF_TRUSTED_ORIGINS", default=[])
TIME_ZONE = "UTC"
ADMIN_ENABLED = True
CMS_ENABLED = True
ADMIN_SERVICES_ENABLED = False
ADMIN_STORE_BACKEND = "sqlite"
ADMIN_STORAGE_PATH = BASE_DIR / "data/admin.sqlite3"
DEBUG=False requires a persistent secret of at least 32 characters and explicit
allowed hosts. Origins include the scheme and host, without a path. Starting the
server opens connections and never changes the model schema. Run makemigrations,
review and commit Python migrations, then run migrate.
Use app.settings for validated project settings. Mount feature modules explicitly
in app.py; do not put executable module composition in settings.py.
See ORM and management for PostgreSQL, model discovery, transactions, Admin registration and the optional ORM metadata store.
Lower-level configuration
The sections below describe the independent Flaxon(...) / Config API, retained
for backend-only applications. They do not replace the generated settings workflow.
Overview
Flaxon provides a flexible configuration system designed for development and production environments.
Configuration values can be loaded from multiple sources, allowing you to keep sensitive settings outside your source code while still providing sensible defaults.
Configuration Sources
Configuration is loaded in the following order (lowest to highest priority):
- Default Values — Built-in framework defaults.
- Application Configuration — Values passed to
Flaxon()orConfig(). - Environment Variables — Variables prefixed with
FLAXON_.
Environment variables always override default values.
Default Configuration
DEFAULTS = {
"ENV": "development",
"DEBUG": False,
"SECRET_KEY": None,
"ALLOWED_HOSTS": [
"localhost",
"127.0.0.1"
],
"MAX_BODY_SIZE": 10 * 1024 * 1024,
"TRUSTED_PROXIES": [],
"PROXY_HEADERS": [
"x-forwarded-for",
"x-forwarded-proto",
"x-forwarded-host",
],
}
Setting Configuration
Configure Through Code
Pass configuration values when creating your application.
from flaxon import Flaxon
app = Flaxon(
"my-app",
debug=True,
config={
"ENV": "production",
"MAX_BODY_SIZE": 5 * 1024 * 1024,
},
)
Configure Through Environment Variables
Linux/macOS
export FLAXON_ENV=production
export FLAXON_DEBUG=false
export FLAXON_SECRET_KEY=your-secret-key
Windows (PowerShell)
$env:FLAXON_ENV="production"
$env:FLAXON_DEBUG="false"
$env:FLAXON_SECRET_KEY="your-secret-key"
Using a .env File
FLAXON_ENV=production
FLAXON_DEBUG=false
FLAXON_SECRET_KEY=your-secret-key
This approach is recommended for local development because it keeps secrets out of your source code.
Accessing Configuration
Configuration values can be accessed in several ways.
# Attribute access
app.config.DEBUG
# Dictionary access
app.config["DEBUG"]
# Safe access
app.config.get("DEBUG")
Environment Helpers
Flaxon provides helper methods for checking the current environment.
# Current environment
app.config.get_env()
# Environment checks
app.config.is_development()
app.config.is_testing()
app.config.is_staging()
app.config.is_production()
Configuration Helpers
Convenience methods are available for common settings.
app.config.get_secret_key()
app.config.get_allowed_hosts()
app.config.get_max_body_size()
Production Configuration
A typical production configuration might look like:
FLAXON_ENV=production
FLAXON_DEBUG=false
FLAXON_SECRET_KEY=<32+ random hex bytes>
FLAXON_ALLOWED_HOSTS=api.example.com,example.com
FLAXON_MAX_BODY_SIZE=10485760
Available Settings
| Setting | Default | Description |
|---|---|---|
ENV |
development |
Current application environment |
DEBUG |
False |
Enables debug mode |
SECRET_KEY |
None |
Secret used for cryptographic operations |
ALLOWED_HOSTS |
localhost, 127.0.0.1 |
Allowed hostnames |
MAX_BODY_SIZE |
10 MB |
Maximum request body size |
TRUSTED_PROXIES |
[] |
Trusted reverse proxy addresses |
PROXY_HEADERS |
Standard proxy headers | Headers used by reverse proxies |
Security Recommendations
| Setting | Recommendation |
|---|---|
DEBUG |
Always set to False in production. |
SECRET_KEY |
Use at least 32 random bytes and never commit it to source control. |
ALLOWED_HOSTS |
Specify only trusted domains. Avoid using wildcards whenever possible. |
MAX_BODY_SIZE |
Set an appropriate upload limit for your application. |
TRUSTED_PROXIES |
Only trust proxies you control. |
Best Practices
For secure and maintainable applications:
- Keep secrets in environment variables or a
.envfile. - Never commit production credentials to version control.
- Use different configuration values for development, testing, and production.
- Disable debug mode in production.
- Restrict allowed hosts to your application's domains.
- Review request size limits based on your application's requirements.
Example Production Setup
from flaxon import Flaxon
app = Flaxon(
"production-api",
config={
"ENV": "production",
"DEBUG": False,
"MAX_BODY_SIZE": 10 * 1024 * 1024,
},
)
With environment variables:
FLAXON_SECRET_KEY=replace-with-a-secure-random-secret
FLAXON_ALLOWED_HOSTS=api.example.com
This keeps sensitive configuration outside your application code while allowing Flaxon to load it automatically at startup.