Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🐍
Intermediaire 20 min Django

Deployer Django sur Firebase

Pourquoi Deployer Django sur Firebase ?

Deployer Django sur Firebase est une approche intéressante pour les développeurs qui souhaitent rendre leur application web plus performante, fiable et facile à déployer. Firebase offre une plateforme complète pour le développement d'applications mobiles et web avec des services tels que Firestore (base de données NoSQL), Authentication (gestion des utilisateurs) et Hosting (déploiement rapide).

Un cas d'usage concret serait un site web de petites tailles, comme un portfolio personnel ou une application web interne pour une entreprise. Firebase offre une solution complète qui permet de gérer les données en temps réel, l’authentification des utilisateurs et le déploiement rapide, tout cela sans avoir à vous soucier de l'infrastructure sous-jacente.

Prerequis

  • Connaissances en Python et Django
  • Connaissance de base en JavaScript et HTML/CSS
  • Comptes Firebase et Google Cloud Platform (GCP)
  • Environnement de développement Python configuré (Python 3.7+)

Concepts fondamentaux

1. Firebase Functions

Firebase Functions sont des fonctions exécutées sur le cloud, qui peuvent être déclenchées par divers événements tels que les requêtes HTTP, la modification d'une base de données Firestore ou l'authentification des utilisateurs.

Concept : Un trigger déclenche une fonction Firebase. Par exemple, une requête HTTP est un trigger pour une fonction qui exécute du code lorsqu'elle est reçue.

## 🌐 firebase_functions.py

import functions_framework
from firebase_admin import initialize_app, auth

initialize_app()

@functions_framework.http
def verify_user(request):
    id_token = request.args.get("id_token")
    try:
        decoded_token = auth.verify_id_token(id_token)
        return f"Authenticated as {decoded_token['email']}"
    except ValueError:
        return "Invalid ID token", 401

2. Firebase Hosting

Firebase Hosting permet de déployer rapidement des applications web statiques ou des Single Page Applications (SPA).

Concept : L'application est compilée en HTML, CSS et JavaScript avant d'être déployée sur Firebase Hosting.

## 🚀 Deployer l'application sur Firebase Hosting

npm install -g firebase-tools
firebase login
firebase init
## Sélectionnez "Hosting" et suivez les instructions

3. Firebase Authentication

Firebase Authentication facilite la gestion des utilisateurs pour vos applications.

Concept : Utilisez Firebase Authentication pour gérer l'authentification des utilisateurs, en fournissant une interface de connexion sécurisée et personnalisable.

## 📝 models.py

from django.contrib.auth.models import AbstractUser
from firebase_admin import auth

class CustomUser(AbstractUser):
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        user = auth.create_user(
            email=self.email,
            password=self.password,
            display_name=self.username
        )

Mise en pratique : projet fil rouge

Mini-projet : Gestionnaire de Tâches

Étape 1 : Créer le projet Django et configurer Firebase

## 🏗️ Créer un nouveau projet Django

django-admin startproject task_manager
cd task_manager

## Installer les dépendances
pip install firebase-admin django-firebase-auth

Structure de base du projet :

task_manager/
├── manage.py
├── task_manager/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── tasks/
    ├── __init__.py
    ├── apps.py
    ├── models.py
    ├── admin.py
    ├── migrations/
    │   └── 0001_initial.py
    ├── views.py
    ├── urls.py
    └── tests.py

Étape 2 : Configurer Firebase

## 📝 settings.py

import os
from firebase_admin import credentials, initialize_app

## Configuration Firebase
FIREBASE_CREDENTIALS = {
    "type": "service_account",
    "project_id": "your-project-id",
    "private_key_id": "your-private-key-id",
    "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
    "client_email": "firebase-adminsdk-...@gserviceaccount.com",
    "client_id": "your-client-id",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-...@gserviceaccount.com"
}

## Initialiser Firebase
cred = credentials.Certificate(FIREBASE_CREDENTIALS)
initialize_app(cred)

## Configuration Django-Firebase-Auth
INSTALLED_APPS += [
    'firebase_auth',
]

FIREBASE_AUTH_FACEBOOK_CLIENT_ID = 'your-client-id'
FIREBASE_AUTH_GOOGLE_CLIENT_ID = 'your-client-id'

Étape 3 : Créer le modèle de tâche

## 📝 tasks/models.py

from django.db import models

class Task(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField()
    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.title

Étape 4 : Créer les vues et les URL pour le gestionnaire de tâches

## 📝 tasks/views.py

from django.shortcuts import render, redirect
from .models import Task

def task_list(request):
    tasks = Task.objects.all()
    return render(request, 'tasks/task_list.html', {'tasks': tasks})

def add_task(request):
    if request.method == 'POST':
        title = request.POST['title']
        description = request.POST['description']
        Task.objects.create(title=title, description=description)
        return redirect('task_list')
    return render(request, 'tasks/add_task.html')

def toggle_task(request, task_id):
    task = Task.objects.get(id=task_id)
    task.completed = not task.completed
    task.save()
    return redirect('task_list')
python
## 📝 tasks/urls.py

from django.urls import path
from .views import task_list, add_task, toggle_task

urlpatterns = [
    path('', task_list, name='task_list'),
    path('add/', add_task, name='add_task'),
    path('toggle/<int:task_id>/', toggle_task, name='toggle_task'),
]

Étape 5 : Créer les templates HTML

<!-- 📝 tasks/templates/tasks/task_list.html -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Task Manager</title>
</head>
<body>
    <h1>Task List</h1>
    <ul>
        {% for task in tasks %}
            <li>
                task.title - task.description
                {% if not task.completed %}
                    <form action="{% url 'toggle_task' task.id %}" method="post">
                        {% csrf_token %}
                        <button type="submit">Mark as Done</button>
                    </form>
                {% else %}
                    <span style="text-decoration: line-through;">task.title - task.description</span>
                {% endif %}
            </li>
        {% endfor %}
    </ul>
    <a href="{% url 'add_task' %}">Add Task</a>
</body>
</html>
html
<!-- 📝 tasks/templates/tasks/add_task.html -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Add Task</title>
</head>
<body>
    <h1>Add Task</h1>
    <form method="post">
        {% csrf_token %}
        <label for="title">Title:</label>
        <input type="text" id="title" name="title"><br><br>
        <label for="description">Description:</label>
        <textarea id="description" name="description"></textarea><br><br>
        <button type="submit">Add Task</button>
    </form>
</body>
</html>

Étape 6 : Déployer l'application sur Firebase Hosting

## 🚀 Deployer l'application sur Firebase Hosting

npm install -g firebase-tools
firebase login
firebase init
## Sélectionnez "Hosting" et suivez les instructions

Erreurs frequentes et debugging

Erreur 1 : ModuleNotFoundError: No module named 'firebase_admin'

Code incorrect :

import firebase_admin
from firebase_admin import credentials, initialize_app

cred = credentials.Certificate('path/to/credentials.json')
initialize_app(cred)

Code correct :

## Assurez-vous que firebase_admin est installé
pip install firebase-admin

import os
from firebase_admin import credentials, initialize_app

FIREBASE_CREDENTIALS = {
    "type": "service_account",
    "project_id": "your-project-id",
    # ... autres champs de configuration Firebase
}

cred = credentials.Certificate(FIREBASE_CREDENTIALS)
initialize_app(cred)

Erreur 2 : firebase-admin is not installed

Code incorrect :

## Installer firebase-admin sans l'utiliser
pip install firebase-admin

Code correct :

## Assurez-vous que firebase_admin est utilisé dans votre code
pip install firebase-admin

import os
from firebase_admin import credentials, initialize_app

FIREBASE_CREDENTIALS = {
    "type": "service_account",
    "project_id": "your-project-id",
    # ... autres champs de configuration Firebase
}

cred = credentials.Certificate(FIREBASE_CREDENTIALS)
initialize_app(cred)

Erreur 3 : ValueError: Invalid ID token

Code incorrect :

## Utiliser un jeton d'ID invalide
import firebase_admin
from firebase_admin import auth

id_token = "invalid-token"
decoded_token = auth.verify_id_token(id_token)

Code correct :

import firebase_admin
from firebase_admin import auth

def verify_user(request):
    id_token = request.args.get("id_token")
    try:
        decoded_token = auth.verify_id_token(id_token)
        return f"Authenticated as {decoded_token['email']}"
    except ValueError:
        return "Invalid ID token", 401

Pour aller plus loin

1. Utiliser Firebase Firestore pour la base de données

Firebase Firestore offre une base de données NoSQL déclarative qui permet de stocker et de synchroniser des données en temps réel.

  • Concept : Utilisez Firebase Firestore comme backend pour votre application Django.
  • Liens : Firebase Firestore

2. Intégrer Firebase Authentication avec OAuth

Intégrez Firebase Authentication avec des fournisseurs d'identité tiers tels que Google, Facebook et Twitter.

3. Créer une application mobile avec Flutter

Créez une application mobile qui interagit avec votre Django backend déployé sur Firebase.

  • Concept : Utilisez Flutter pour créer une application mobile qui communique avec votre backend Django via des API REST.
  • Liens : Flutter

Défi pratique : Ajouter l'authentification Google à votre application

Ajoutez la possibilité d’authentifier les utilisateurs de votre application Django en utilisant Firebase Authentication et le provider Google.

  1. Configurez Firebase Authentication pour utiliser le provider Google.
  2. Mettez à jour vos vues pour permettre à l'utilisateur de s'inscrire avec son compte Google.
  3. Testez votre fonctionnalité d'authentification.

Bonne chance avec ce projet! N'hésitez pas si vous avez des questions ou des problèmes.

Besoin d'aide sur Django ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Quelle est l'intégration entre Django et Firebase ?
Firebase permet d'utiliser des services backend tels que le stockage de données, l'authentification et le messaging en temps réel avec Django. En utilisant Django-Firebase, vous pouvez accéder facilement à ces services pour améliorer les fonctionnalités de votre application.
Comment installer Django sur Firebase ?
Pour installer Django sur Firebase, d'abord installez Python et pip sur votre système. Ensuite, créez un nouveau projet Django avec 'django-admin startproject mon_projet'. Installez ensuite les packages nécessaires pour Firebase en utilisant pip : 'pip install firebase-admin'.
Quels sont les avantages de déployer Django sur Firebase ?
Firebase offre une infrastructure rapide et évolutrice, avec des services hautement scalables. En déployant Django sur Firebase, vous bénéficiez d'une meilleure performance en raison du traitement côté serveur, ainsi que d'un accès facile aux données stockées dans Firebase.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.