Comments on: Explication de code: des mixins et des décorateurs de méthode pour Django http://sametmax.com/explication-de-code-des-mixins-et-des-decorateurs-de-methode-pour-django/ Du code, du cul Mon, 28 Oct 2019 11:54:55 +0000 hourly 1 https://wordpress.org/?v=4.9.7 By: Sekun http://sametmax.com/explication-de-code-des-mixins-et-des-decorateurs-de-methode-pour-django/#comment-192023 Sun, 21 Jan 2018 10:57:43 +0000 http://sametmax.com/?p=1812#comment-192023 Bonjour,

J’aurais une remarque sur la différence entre l’ajout d’un décorateur à la méthode dispatch de la classe courante, et hériter d’une vue LoginRequiredMixin, sur laquelle ce décorateur a été ajouté.

J’ai du mal avec le rendu de la balide <code>Voir exemple sur 0bin

Les vues Test1 et Test2 ne redirigeront pas vers la page de login, car dans le case de Test1, la méthode dispatch est appelée après avoir vérifié si l’utilisateur a bien les permissions nécessaires, et dans le cas de Test2, aucune redirection n’est faite car la réponse est stockée dans une variable, qui ne sera jamais retournée.

Avec Test3, la fonction dispatch est remplacée par une autre fonction grâce au décorateur, elle redirige bien vers la page de login.

]]>
By: the_knights_of_ni http://sametmax.com/explication-de-code-des-mixins-et-des-decorateurs-de-methode-pour-django/#comment-190389 Fri, 27 Oct 2017 12:13:49 +0000 http://sametmax.com/?p=1812#comment-190389 Ok merci pour la réponse… ça va m’aider à passer à autre chose lol

]]>
By: Sam http://sametmax.com/explication-de-code-des-mixins-et-des-decorateurs-de-methode-pour-django/#comment-190388 Fri, 27 Oct 2017 12:10:09 +0000 http://sametmax.com/?p=1812#comment-190388 Les mixins sont utilisés comme des classes abstraites dans le sens où elle ne peuvent être instanciées par elles mêmes : on doit forcément en hériter. Mais contrairement aux classes abstraites, toutes les méthodes des mixins sont concrètes.

]]>
By: the_knights_of_ni http://sametmax.com/explication-de-code-des-mixins-et-des-decorateurs-de-methode-pour-django/#comment-190379 Thu, 26 Oct 2017 22:13:58 +0000 http://sametmax.com/?p=1812#comment-190379 Bonjour,

j’ai une petite question sur les Mixin, venant du monde Java (oui personne n’est parfait lol), je me demandais si les Mixin n’etait pas une sorte de classe Abstraite en Java ?

Juste pour que mon cerveau soit rassuré….

]]>
By: rakweine http://sametmax.com/explication-de-code-des-mixins-et-des-decorateurs-de-methode-pour-django/#comment-160430 Thu, 07 May 2015 16:01:40 +0000 http://sametmax.com/?p=1812#comment-160430 Et oui je souhaite faire un filtre plus tard, et oui je vais me servir au moment là de la query_set method unique pour le filtre

l’avantage c’est que j’aurai beaucoup moins de traitement conditionnels à faire vue que les variables auront déjà été trité dans ma dispatch. Mon code sera alors plus facile à maintenir.

]]>
By: rakweine http://sametmax.com/explication-de-code-des-mixins-et-des-decorateurs-de-methode-pour-django/#comment-160429 Thu, 07 May 2015 15:55:00 +0000 http://sametmax.com/?p=1812#comment-160429 Bah! résolu !

j’ai pu constaté que la dispatch method est fournie avec une batterie de variables interressantes et j’ai compris le rôle de la super method !(desolé j’ai tendance à utiliser le plus souvent l’anglais ne m’en voule pas trop)

donc c’est un souci resolu:

et pour ce que sa interresse voici ma façon de procéder:

problème: soit un formulaire de recherche d’articles en get method (<form… method=”GET”>…), le dis formulaire est autocomplete(grace à js + ajax) afin de faciliter la recherche d’un article. sauf que l’user(utilisateur malveillant ou autre..) peut indiquer un nom absent dans la bdd ou la jumping list qui apparaît

je souhaitais à partir de cet exemple aleatoirement choisi savoir comment gérer ce genre de cas et j’ai choisi d’utliser une liste view pour l’affichage du resultat et la dispatch method pour le traitement des données transmises.

class MaVue(ListView):

def dispatch(self, request, *args, **kwargs):

try:

get_elt_search = MonModel.objects.get(article_name=search_article)

except MonModel.DoesNotExist:

self.kwargs.update(csrf(self.request)

self.kwargs['nom_erreur']= erreur

return template_to_response(self.template_name, kwargs)

super(MaVue, self).dispatch(request, *args, **kwargs)

----- reste du code de la vue ------

Bon c’est tout et ça fonctionne correctement.

]]>
By: Sam http://sametmax.com/explication-de-code-des-mixins-et-des-decorateurs-de-methode-pour-django/#comment-160428 Thu, 07 May 2015 15:51:51 +0000 http://sametmax.com/?p=1812#comment-160428 Si tu veux filtrer ton queryset, fait le en overridant get_queryset(). Tu n’as pas besoin de toucher à dispatch()

]]>
By: rakweine http://sametmax.com/explication-de-code-des-mixins-et-des-decorateurs-de-methode-pour-django/#comment-160419 Thu, 07 May 2015 10:37:33 +0000 http://sametmax.com/?p=1812#comment-160419 Je repose ma question vue que tu ne l’as pas vu:

comment je pourrais transmettre des paramètres aux autres méthodes de ma CBV (eg: MaVue(ListView)) lorsque je modifie la methode dispatch ?

un exemple vaudrais mieux alors voici un très simple pris comme ça…:

disons que j’ai un formulaire de recherche d’articles ou autres, ce formulaire utilise la Get method, bien ! lorsque les donnés sont transmises je souhaite appellé la methode dispatch afin de limiter la recherche aux articles susceptibles d’exister dans ma bdd (dans les cas d’un formulaire avec des autocompletions ou autres…).

Alors moi j’aimerais savoir comment je pourrais transmettre les paramètres analysé aux autres methode de la même vue.

code:


class MaVue(ListView):

def dispatch(self, request, *args, **kwargs):

je recupere les donnees transmise via get

seach_article = self.request.GET.get("elt") <---- données recherché par un eventuels user

try:

get_elt_search = MonModel.objects.get(article_name=search_article)

except MonModel.DoesNotExist:

je retourne une render_to_response ou autre

---- et c'est ici que je bloque j'aimerais savoir comment je pourrais transmettre ma get_elt_search à ma super method comme explique dans le tutos.

pourquoi: parce que bah je souhaite reutiliser cette get_elt_search dans ma queryset method histoire de customiser un peu plus ma requête .

Voilà j’espère que vous m’avez compris et que vous me repondrai aussi vite.

]]>
By: Sam http://sametmax.com/explication-de-code-des-mixins-et-des-decorateurs-de-methode-pour-django/#comment-160417 Thu, 07 May 2015 08:55:49 +0000 http://sametmax.com/?p=1812#comment-160417 Le MRO d’une classe en Python est disponible dans l’attribut __mro__ :

>>> from collection import defaultdict
>>> defaultdict.__mro__
(collections.defaultdict, dict, object)

Pour le schéma, on verra quand j’aurais le temps de pondre ça.

]]>
By: rakweine http://sametmax.com/explication-de-code-des-mixins-et-des-decorateurs-de-methode-pour-django/#comment-160412 Thu, 07 May 2015 07:36:32 +0000 http://sametmax.com/?p=1812#comment-160412 Désolé de ne pas rafraichir la page tout le temps donc:

Oui,

Je souhaite avoir le mro de certaines classe en particulier les voici:

ListView, DetailView, Formview, createView, UpdateView.

et si possible indiquez les elements retournés par chacune des methode de la vue.

]]>