Bob > en fait, je crois que je n'ai pas bien compris en quoi la solution 3 impose d'écrire deux fonctions à chaque fois ?
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)
<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
Zeph Le 25/05/2011 à 20:05 non ça c'est la 2 ; la 3 oblige à repartir des paramètres de la query string à chaque fois, et donc les valider, faire les select en base, etc.
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Zeph Le 27/05/2011 à 23:51 bah comment tu ferais, en Django ?
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
#up#
Je viens de me souvenir que je n'avais pas répondu à ça ^^
Si j'ai bien compris le problème, tu veux afficher une page, qui est composée de deux morceaux, le premier morceau nécessite un appel à ma_fonction_1(), le second demande un appel à ma_fonction_2().
Ensuite, tu veux pouvoir construire la page d'un seul bloc (on appelle alors une fonction ma_page_complete() qui appelle elle-même ma_fonction_1() et ma_fonction_2()), ou alors en AJAX, avec deux requêtes HTTP, qui appellent successivement ma_fonction_1() et ma_fonction_2().
Ce qui te gêne, c'est de faire la vérification des arguments dans ma_fonction_1() et ma_fonction_2() (ce qui ne sert à rien quand on utilise ma_page_complete()), ou de faire plein de if pour distinguer dans ma_fonction_1() et ma_fonction_2() si on est dans un appel AJAX ou non.
Ai-je bon ?
Avec Django, tu peux faire un middleware, qui va intercepter les requêtes HTTP et les réponses fournies. Pour les urls de type /ajax/functions, il s'occupe de vérifier les arguments, puis d'appeler la sous-fonction ma_fonction_1() ou ma_fonction_2(), et enfin de transformer le résultat en JSON. Pour les urls de type /static/functions (et donc l'appel à ma_page_complete()), il ne fait rien : ma_page_complete() est appelée normalement et elle s'occupe des vérifications. Du coup, zéro duplication de code, et zéro code inutile, tout se fait de façon transparente (mais il faut prévoir des arguments un peu normalisés pour que topic_id représente toujours un identifiant de topic afin de vérifier les arguments facilement).
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)
<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
peut-être à cause du code de vérif à ajouter dans chaque fonction, même s'il n'était pas toujours utilisé ? Utilisais-tu un middleware pour ça ?
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)
<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
Zeph Le 08/02/2012 à 00:05 Hmm je ne sais plus trop. Le seul problème qui me revienne n'est pas lié à Django, je l'ai encore eu récemment en voulant faire autre chose.
Imaginons une page X qui contient deux sous-parties "ajaxifiables" (que j’appellerai "frames") A et B contenant chacune un formulaire. Si je valide le formulaire de A et qu'il y a une erreur de saisie, la frame devrait être affichée à nouveau (avec un petit message d'erreur à côté des champs, par exemple). Par contre, si tout se passe bien, on peut avoir envie de provoquer l'affichage d'une nouvelle page complète, et je ne sais pas comment faire ça autrement qu'avec des hacks (un bout de JS qui, selon la réponse reçue, l'affiche dans la frame ou redirige l'affichage).
J'ai voulu tenter d'utiliser soit une réponse HTTP 200 pour actualiser seulement la frame, soit une réponse HTTP 302 vers l'URL de la page pour actualiser le tout. Mais l'objet XmlHttpRequest n'étant pas capable de ne pas suivre automatiquement les 302 (c'est envisagé pour une prochaine version de la spec.), ça n'est pas possible.
Sinon pour en revenir aux problèmes spécifiques que j'avais avec Django, je ne sais plus trop, je vais retrouver mon code de l'époque et tâcher de me souvenir ^^
[edit] en fait, ce que tu proposes s'approche de la solution n°3 de mon premier post, non ?
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Ça ne me choque pas de faire une redirection après une validation de formulaire, c'est même conseillé pour éviter les F5 qui valident à nouveau, non ?
C'est en effet la solution 3, mais avec une solution simple à mettre en œuvre pour ne pas faire les validations à chaque fragment, donc en supprimant son principal problème ^^
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)
<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant
Zeph Le 08/02/2012 à 19:31 Oui, faire une redirection ça me semble être la bonne solution, c'est la mise en oeuvre technique sur laquelle j'ai des doutes ^^
Pour la validation des paramètres des fragments, je n'ai pas trop du comprendre ta question ; chaque fragment au sein d'une page a potentiellement des paramètres qui lui sont propres, ainsi que des paramètres partagés. Je ne vois pas trop comment un middleware peut s'en occuper, à moins d'avoir un middleware par fragment (ce qui rend le middleware inutile, autant faire la validation dans le fragment).
Sinon autre solution : la fonction correspondant à chaque fragment pourrait avoir des décorateurs "validate_machin" pour chaque paramètre à valider. Un middleware (ou n'importe quoi d'autre) aurait pour rôle la récupération de tous les paramètres à valider, en supprimant les éventuels doublons, et l'exécution de ces validateurs.
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)