Objets de réponse et gestion des requêtes dans Django

  1. 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')

  1. 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

  1. 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)

Étiquettes: Django Python HTTP Views JSON

Publié le 12 septembre à 05h37