- Objets de réponse
1.1 Types fondamentuax de réponses
from django.shortcuts import render, HttpResponse, redirect
# 1. Objet HttpResponse : renvoie une chaîne de caractères
return HttpResponse("Message reçu")
# 2. Objet render : retourne une page HTML avec possibilité de transmettre des données
return render(requete, 'connexion.html', {'utilisateur': 'admin'})
# 3. Objet redirect : effectue une redirection
return redirect('/accueil/')
# Note importante : les trois sont essentiellement des objets HttpResponse
# Toute fonction de vue doit retourner un objet HttpResponse
1.2 Réponses JSON avec JsonResponse
import json
from django.http import JsonResponse
def traitement_json(requete):
donnees_utilisateur = {
'nom_utilisateur': 'utilisateur français',
'mot_de_passe': 'secret',
'interets': ['sport', 'musique']
}
# Méthode 1 : Utilisation du module json standard
chaine_json = json.dumps(donnees_utilisateur, ensure_ascii=False)
return HttpResponse(chaine_json, content_type='application/json')
# Méthode 2 : Utilisation de JsonResponse (recommandée)
return JsonResponse(donnees_utilisateur, json_dumps_params={'ensure_ascii': False})
# Pour les listes (nécessite le paramètre safe)
liste_donnees = [100, 200, 300]
return JsonResponse(liste_donnees, safe=False)
1.3 Traitement des fichiers uploadés
def gestion_fichiers(requete):
if requete.method == 'POST':
# Récupération des données standard
nom_utilisateur = requete.POST.get('nom_utilisateur')
# Récupération du fichier
fichier = requete.FILES.get('fichier')
if fichier:
# Sauvegarde du fichier
with open(fichier.nom, 'wb') as destination:
for fragment in fichier.chunks():
destination.write(fragement)
return render(requete, 'formulaire.html')
- Objet requête (Request)
# Méthode HTTP utilisée
methode = requete.method # 'GET', 'POST', etc.
# Données POST (hors fichiers)
donnees_post = requete.POST
valeur_unique = requete.POST.get('champ')
liste_valeurs = requete.POST.getlist('champ')
# Données GET (paramètres URL)
parametres_get = requete.GET
valeur_param = requete.GET.get('parametre')
# Fichiers uploadés
fichiers = requete.FILES
fichier = requete.FILES.get('fichier')
# Informations sur l'URL
chemin = requete.path # Chemin sans paramètres
chemin_complet = requete.get_full_path() # Chemin avec paramètres
- Fonctoins et classes de vue
3.1 FBV vs CBV
# FBV (Function-Based View)
def ma_vue(requete):
if requete.method == 'GET':
return HttpResponse('Méthode GET')
elif requete.method == 'POST':
return HttpResponse('Méthode POST')
# CBV (Class-Based View)
from django.views import View
class MaVueClasse(View):
def get(self, requete):
return render(requete, 'template.html')
def post(self, requete):
return HttpResponse('Traitement POST')
3.2 Mécanisme interne des CBV
# Le mécanisme de dispatch utilise la réflexion (reflection)
# pour appeler la méthode appropriée selon le verbe HTTP
class VueBase(View):
methodes_http = ['get', 'post', 'put', 'delete', 'head', 'options', 'trace']
def dispatch(self, requete, *args, **kwargs):
if requete.method.lower() in self.methodes_http:
# Utilisation de getattr pour trouver la méthode correspondante
gestionnaire = getattr(self, requete.method.lower(), self.http_method_not_allowed)
return gestionnaire(requete, *args, **kwargs)
else:
return self.http_method_not_allowed(requete, *args, **kwargs)