Django-fr

Forum

  • Accueil
  • » Django-fr
  • » Questions / Conception d'une application de gestions d'utilisateurs avec interaction avec une base "distante"

#1 09-05-2012 14:45:40

Nicolas Steinmetz
Membre
Inscription : 11-08-2010
Messages : 96

Questions / Conception d'une application de gestions d'utilisateurs avec interaction avec une base "distante"

Bonjour,

Je me remets à Django pour construire une application de gestion
d'utilisateurs.

L'idée est assez "simple" :

   - Mon application contient une liste d'utilisateurs avec des
   informations de profils (nom, prénom, email, pays et qqs autres champs de
   profile) et un status d'accès à une application groupe.
   - J'ai une application groupe de laquelle je vais récupérer la liste des
   utilisteurs de façon quotidienne
   - Je compare la liste des utilisateurs des mon appli Django avec mon
   appli groupe et je fais le tri des comptes sur plusieurs critères :
      - Si le compte n'existe pas dans mon application Django => Compte
      désactivé temporairement, jusqu'à sa modération
      - Si le compte existe des deux cotés mais avec un statut différent =>
      Mise à niveau en fonction du statut dans mon application Django
      - Si le compte est identique des deux cotés => RAS smile

Ensuite, il se trouve que pour chaque filiale du groupe, j'ai des
responsables et que ces personnes doivent déclarer leurs utilisateurs et
valider les comptes en attente de modération.

Q1 - Gestion des "Responsables Pays"
----------------------------------------------------------

Mon but est alors que les "Responsables Pays" ne voient que les pays et les
personnes sous leur(s) responsabilité(s)

Je pensais intuitivement à faire en gros :

   - Une classe CountryManager qui se baserait sur la classe "User" et
   auquel je rajouterais notamment un attribut "Pays"
   - Une classe User avec un attribut "Pays"
   - Mapper les vues vis à vis des attributs pays pour n'afficher que les
   pays pour lesquels le CountryMananger a des responsabilités.

Il y a plus futé ou mieux une app pour ça ?
Q2 - Interaction à la base de mon application groupe (postgres) :
---------------------------------------------------------------------------------------------

Vaut-il mieux passer par le support des applications "legacy" de django ou
bien du "raw SQL"

Q3 - Pour la gestion de batchs, django-celery ?
--------------------------------------------------------------------

Je vais avoir un certain nombre de batchs à exécuter en ligne de commande
(via cron) ou des traitements unitaires via l'interface web (désactiver
l'utilisateur => mise à jour de la base de l'application groupe + envoi
email par ex) - je pensais utiliser django-celery ; un avis particulier sur
la question ?

Merci d'avance pour vos retours et vos lumières smile
Nicolas

Hors ligne

#2 09-05-2012 15:29:27

David Thenon
Membre
Inscription : 11-08-2010
Messages : 156
Site Web

Re : Questions / Conception d'une application de gestions d'utilisateurs avec interaction avec une base "distante"

Salut,

> Q1 - Gestion des "Responsables Pays"
> [snip]
> Il y a plus futé ou mieux une app pour ça ?

À mon avis ajouter tes méthodes de filtrages au niveau du manager est le
meilleur choix, c'est un peu son but de contenir la logique d'accès aux
données de ton modèle.

Et pour les vues, avec le système du Class based views tu peux facilement
imposer ces filtrations sur un "Mixin" et le réutiliser partout après.

Hors ligne

#3 11-05-2012 23:14:32

Nicolas Steinmetz
Membre
Inscription : 11-08-2010
Messages : 96

Re : Questions / Conception d'une application de gestions d'utilisateurs avec interaction avec une base "distante"

Le 9 mai 2012 16:29, David THENON <david.thenon _AT_ wanadoo.fr> a écrit :

> Salut,
>
> > Q1 - Gestion des "Responsables Pays"
> > [snip]
> > Il y a plus futé ou mieux une app pour ça ?
>
> À mon avis ajouter tes méthodes de filtrages au niveau du manager est le
> meilleur choix, c'est un peu son but de contenir la logique d'accès aux
> données de ton modèle.
>
> Et pour les vues, avec le système du Class based views tu peux facilement
> imposer ces filtrations sur un "Mixin" et le réutiliser partout après.
>

Merci pour ce retour.

Avec Django 1.4, il est possible de faire un list_filter custom/dyanmique :
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter

J'ai pu donc faire cette restriction visuellle directement dans l'admin.

Me restera plus qu'a changer un peu les couleurs de l'admin et cette parte
là de l'appli est faite en qqs heures du coup ^^

Hors ligne

#4 13-05-2012 18:51:53

Christophe, Jean-Charles Narbonne
Membre
Inscription : 23-06-2011
Messages : 30

Re : Questions / Conception d'une application de gestions d'utilisateurs avec interaction avec une base "distante"

Après, tel que tu décris ton modèle, un country manager ne peut avoir qu'un
pays, ce qui est contradictoires avec ton emplois du pluriel plus haut.

Bon reprennons tes points que je puisse construire ma critique que j'espère
constructive:

   - Une classe CountryManager qui se baserait sur la classe "User" et
   auquel je rajouterais notamment un attribut "Pays"
   - Une classe User avec un attribut "Pays"

**
Le plus souvent, il est recommendé d'utiliser des profils mes les sagouins
de mon espèce utilisent le "monkey-patching" pour ajouter des champs à User.

http://www.turnkeylinux.org/blog/django-profile

Pour ma part, je ne trouve pas ça plus extensible qu'un genou de grand mère
dans le sens ou faire cohabiter sur un site plusieurs application utilisant
des profil relève du perieux (qui plus est la solution alternative est plus
performante).

L'autre solution simplifie des choses mais n'est ni standart, ni
documentée. De plus, elle est pas gérée par south.

elle consiste à ajouter dans ton models.py:

# User Monkey patch
models.ManyToMany(Countries, null=True, related_name="admins",
blank=True).contribute_to_class(
    User, "myapp_countries")

L'héritage peut être pertinant dans certains contexte néanmoins, tant que
l'orm peut s'en passer. Après si c'est vraiment la solution que tu retiens,

http://pypi.python.org/pypi/django-model-utils

Regarde le InheritanceManager, tu trouvera peut être ça sympatique.

Enfin, Créer tant de tables c'est autant de jointure pour arriver à lier
les utilisateurs aux pays administrés.

Bonne chance.



2012/5/12 Nicolas Steinmetz <nsteinmetz _AT_ gmail.com>

>
>
> Le 9 mai 2012 16:29, David THENON <david.thenon _AT_ wanadoo.fr> a écrit :
>
> Salut,
>>
>> > Q1 - Gestion des "Responsables Pays"
>> > [snip]
>> > Il y a plus futé ou mieux une app pour ça ?
>>
>> À mon avis ajouter tes méthodes de filtrages au niveau du manager est le
>> meilleur choix, c'est un peu son but de contenir la logique d'accès aux
>> données de ton modèle.
>>
>> Et pour les vues, avec le système du Class based views tu peux facilement
>> imposer ces filtrations sur un "Mixin" et le réutiliser partout après.
>>
>
> Merci pour ce retour.
>
> Avec Django 1.4, il est possible de faire un list_filter custom/dyanmique
> :
>
> https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter
>
> J'ai pu donc faire cette restriction visuellle directement dans l'admin.
>
> Me restera plus qu'a changer un peu les couleurs de l'admin et cette parte
> là de l'appli est faite en qqs heures du coup ^^
>
> --
> Nicolas Steinmetz
> http://www.steinmetz.fr - http://nicolas.steinmetz.fr/
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>

Hors ligne

#5 23-05-2012 21:58:04

Nicolas Steinmetz
Membre
Inscription : 11-08-2010
Messages : 96

Re : Questions / Conception d'une application de gestions d'utilisateurs avec interaction avec une base "distante"

Le 13 mai 2012 19:51, Christophe Narbonne <christophe31 _AT_ gmail.com> a écrit :

> Après, tel que tu décris ton modèle, un country manager ne peut avoir
> qu'un pays, ce qui est contradictoires avec ton emplois du pluriel plus
> haut.
>
> Bon reprennons tes points que je puisse construire ma critique que
> j'espère constructive:
>
>    - Une classe CountryManager qui se baserait sur la classe "User" et
>    auquel je rajouterais notamment un attribut "Pays"
>    - Une classe User avec un attribut "Pays"
>
>
Oui en effet, je suis passé en m2m depuis smile


> Le plus souvent, il est recommendé d'utiliser des profils mes les sagouins
> de mon espèce utilisent le "monkey-patching" pour ajouter des champs à User.
>
> http://www.turnkeylinux.org/blog/django-profile
>
> Pour ma part, je ne trouve pas ça plus extensible qu'un genou de grand
> mère dans le sens ou faire cohabiter sur un site plusieurs application
> utilisant des profil relève du perieux (qui plus est la solution
> alternative est plus performante).
>
> L'autre solution simplifie des choses mais n'est ni standart, ni
> documentée. De plus, elle est pas gérée par south.
>
> elle consiste à ajouter dans ton models.py:
>
> # User Monkey patch
> models.ManyToMany(Countries, null=True, related_name="admins",
> blank=True).contribute_to_class(
>     User, "myapp_countries")
>
> L'héritage peut être pertinant dans certains contexte néanmoins, tant que
> l'orm peut s'en passer. Après si c'est vraiment la solution que tu retiens,
>
> http://pypi.python.org/pypi/django-model-utils
>
> Regarde le InheritanceManager, tu trouvera peut être ça sympatique.
>

Merci, je ne connaissais pas. Je me mets ça sous le coude.

>
> Enfin, Créer tant de tables c'est autant de jointure pour arriver à lier
> les utilisateurs aux pays administrés.
>

Certes mais bon, la perf brute n'est pas mon objectif premier pour cette
application ^^



> Bonne chance.
>
>
Merci et j'ai presque fini ; plus que les envois de mails à gérer smile

Nicolas

Hors ligne

  • Accueil
  • » Django-fr
  • » Questions / Conception d'une application de gestions d'utilisateurs avec interaction avec une base "distante"

Pied de page des forums