Avancé
🧠 Fondamentaux
30 XP
0 personnes ont réussi
Vue complete avec formulaire
Maintenant, assemblons tout : un formulaire Django utilise dans une vraie vue. C'est le pattern le plus courant en Django.
Le cycle classique d'une vue avec formulaire :
1. GET : afficher le formulaire vide 2. POST : recevoir les données, valider, traiter si OK, reafficher avec erreurs sinon
En Django, ca donne :
def ma_vue(request): if request.method == 'POST': form = MonForm(data=request.POST) if form.is_valid(): # Traiter les données return HttpResponse('Merci!') # Formulaire invalide : sera reaffiche avec les erreurs else: form = MonForm() # Ici on retournerait normalement render(request, 'template.html', {'form': form}) # Mais pour nous, on va retourner du JSON
Crée d'abord un formulaire FeedbackForm avec : - name : CharField, max 100 - email : EmailField - rating : IntegerField, min_value=1, max_value=5 - comment : CharField, widget=forms.Textarea, required=False
Puis crée une fonction vue feedback_view(request) qui : - Si GET : retourne JsonResponse avec {'form_fields': ['name', 'email', 'rating', 'comment']} - Si POST : valide le formulaire avec request.POST - Si valide : retourne JsonResponse avec {'success': True, 'data': form.cleaned_data} (status 200). Attention : cleaned_data peut contenir des types non serialisables. Convertis le contenu en strings avec un dict comprehension. - Si invalide : retourne JsonResponse avec {'success': False, 'errors': form.errors} (status 400). Note : form.errors est un ErrorDict, convertis-le en dict classique avec dict(form.errors). - Sinon : retourne JsonResponse avec {'error': 'Méthode non autorisee'} (status 405)
req = HttpRequest()
req.method = 'GET'
resp = feedback_view(req)
data = json.loads(resp.content)
assert 'form_fields' in data and 'name' in data['form_fields']