Django (Python)

Django fonctionne sur Kavio, avec quelques réglages à connaître.

1. Variables d'environnement

Dans le panneau de configuration à l'import (ou dans la section Variables d'environnement de la page projet), déclarez :

VariableValeurPourquoi
SECRET_KEYune chaîne aléatoire générée avec python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"Requise par Django, absente du dépôt par convention. Votre settings.py doit la lire via os.environ.get('SECRET_KEY', ...) plutôt que de la coder en dur.
DEBUGFalseSans elle (ou si votre settings.py code DEBUG = True en dur), vous exposez la page d'erreur détaillée de Django à vos visiteurs.

2. ALLOWED_HOSTS et le HTTPS

Deux réglages à faire directement dans settings.py, pas via une variable d'environnement Kavio — ils sont propres à Django, pas à la plateforme.

ALLOWED_HOSTS — Kavio attribue un sous-domaine aléatoire à chaque projet (*.onkavio.fr), en plus d'un domaine personnalisé possible. Impossible de le connaître à l'avance :

ALLOWED_HOSTS = ['*']

Pour que la connexion et les formulaires fonctionnent correctement en HTTPS, ajoutez aussi ces deux lignes :

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
CSRF_TRUSTED_ORIGINS = ['https://*.onkavio.fr']

(Si vous utilisez un domaine personnalisé, ajoutez-le aussi à CSRF_TRUSTED_ORIGINS.)

3. Le CSS/JS statique ne s'affiche pas ? Ajoutez collectstatic au démarrage

Kavio détecte Django automatiquement (présence de manage.py) et lance par défaut python manage.py migrate && gunicorn ... votreapp.wsgi:application — mais jamais collectstatic. Sans lui, le CSS de l'admin Django (et de vos propres templates, si vous servez des fichiers statiques) ne se charge pas.

La solution : servez vos statics avec Whitenoise (pip install whitenoise, middleware + STATIC_ROOT), puis surchargez la commande de démarrage avec la variable RAILPACK_START_CMD :

python manage.py collectstatic --noinput && python manage.py migrate && gunicorn --bind 0.0.0.0:${PORT:-8000} votreapp.wsgi:application

⚠️ Cette variable remplace entièrement la commande par défaut — pensez à garder migrate et gunicorn dedans, Kavio ne les rajoute plus une fois que vous la définissez.

Choisir sa version de Python

Sans rien préciser, Kavio utilise une version par défaut (~3.13). Pour en fixer une précise, deux options :

  • Un fichier .python-version à la racine du dépôt (juste le numéro, ex. 3.12.10) — convention pyenv/mise. Recommandé : versionné avec le code, donc valable aussi en local et lisible par n'importe qui qui récupère le dépôt.
  • La variable d'environnement RAILPACK_PYTHON_VERSION — utile seulement si vous voulez une version différente sur Kavio par rapport à votre environnement local.

Ce qui n'est pas nécessaire

Vous n'avez rien à faire concernant :

  • PORT — automatiquement imposé par la plateforme, votre app n'a pas à le déclarer ni à le lire.
  • Les migrations — tant que vous gardez python manage.py migrate dans votre commande de démarrage (par défaut ou via RAILPACK_START_CMD), elles s'appliquent à chaque déploiement.
  • Le disque applicatif — inscriptible sur Kavio, aucune redirection de fichiers à prévoir.