Comment concevoir une application Django/Javascript pour fournir des réponses Ajax conditionnelles aux requêtes HTTP conventionnelles?Est-ce que Django/Javascript peut gérer les réponses "Ajax" conditionnelles aux requêtes HTTP POST?
Sur le serveur, j'ai un objet Form personnalisé. Lorsque le navigateur envoie les données du formulaire, le serveur vérifie les données soumises par rapport aux données et règles existantes (par exemple, si le formulaire ajoute une entité à une base de données, cette entité existe-t-elle déjà dans la base de données?). Si les données sont transmises, le serveur enregistre, génère un numéro d'identification et l'ajoute aux données du formulaire, puis transmet le formulaire et les données au navigateur.
if request.method == 'POST':
formClass = form_code.getCustomForm()
thisForm = formClass(data=request.POST)
if thisForm.isvalid():
saveCheck = thisForm.saveData()
t = loader.get_template("CustomerForm.html")
c = Context({ 'expectedFormObj': thisForm })
(Notez que ma logique personnalisée vérification est en SAVEDATA() et est séparé de la validation HTML fait par isValid().)
Jusqu'à présent, Django standard (je l'espère). Mais si les données ne passent pas, je veux envoyer un message au navigateur. Je suppose que saveData() pourrait mettre le message dans un attribut du formulaire, et le gabarit pourrait vérifier cet attribut, intégrer ses données en tant que variable javascript et inclure une fonction javascript pour afficher le message. Mais passer tout ce qui forme html, juste pour ajouter un message, semble inélégant (comme le fait le processus standard de soumission de formulaire Django, mais peu importe). Dans ce cas, j'aimerais simplement faire passer le message. Maintenant je suppose que je pourrais lier une fonction Javascript à l'événement onsubmit du formulaire html, et avoir ce problème XMLHttpRequest, et avoir le serveur répondre à cela basé sur la sortie de l'appel saveData(). Mais alors le navigateur a deux demandes au serveur en suspens (POST et XHR). Peut-être qu'un saveData() réussirait à réécrire toute la page et à effacer tout potentiel de conflit. Mais je devrais aussi demander au serveur de séquencer sa réponse au XHR pour suivre la réponse au POST, et comprendre comment communiquer le résultat de saveData à la réponse au XHR. Je suppose que c'est faisable, même sans la programmation de fil, je ne sais pas, mais il semble malpropre.
Je suppose que je pourrais utiliser javascript pour rendre la réponse du navigateur conditionnelle à quelque chose dans la réponse à la demande POST (soit réécrire la page entière, ou simplement afficher un message). Mais je soupçonne que les mains javascript de la page contrôlent le navigateur avec la demande POST, et que toute réponse au POST ne ferait que réécrire la page.
Alors, est-ce que je peux concevoir un processus pour renvoyer le formulaire entier seulement si saveData() fonctionne côté serveur, et un message qui est affiché sans réécrire le formulaire entier si saveData() ne fonctionne pas? Si c'est le cas, comment?
Ceci est probablement trop long. – chernevik