IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Interface administrateur Django


Sujet :

Django Python

  1. #1
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut Interface administrateur Django
    Bonjour à tous,
    Je rédige actuellement une appli. Django et les choses se passent plutôt bien.
    J'ai paramétré l'interface administrateur en suivant scrupuleusement la doc, et le résultat est "somptueux", tris, filtres, recherches, edit in-line des tables reliées, tout y est, sans pratiquement aucune ligne de code. Bravo Django !
    Revers de la médaille. Cette interface administrateur est une 'boîte noire', qui du point de vue du programmeur se résume à la ligne:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
        (r'^admin/(.*)', admin.site.root),
    Maintenant mon problème est le suivant, je voudrais rentrer dans cette 'boîte noire' par exemple pour envoyer des emails automatiquement à la création de certains objets.
    Rentrer dans le code de django.contrib.admin au niveau du code est très difficile...
    Y-a-t-il une solution simple ?
    A défaut, où placer un code qui s'exécuterait automatiquement à chaque fin de session administrateur, pour faire en 'batch' ce que je n'ai pas pu faire 'à la volée'?
    Il est assez facile de créer des formulaires et des vues pour la création d'objets par les utilisateurs, mais comparées à l'interface admin, elles restent pauvres si on se borne à utiliser la doc. J'aimerais parfois copier l'interface administrateur pour la gestion de certains objets (pas tous), mais évidemment sans (tous) les droits administrateur, comment faire avec peu de code (visualiser par exemple une table avec options de tri et de filtres à la mode 'admin') je n'ai pas trouvé de solution dans la doc. de base.
    Si vous avez des idées ...
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  2. #2
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Concernant ta demande pour envoyer des emails quand un objet est crée, tu peux en envisager de surcharger la méthode save de ton "model". http://docs.djangoproject.com/en/dev...-model-methods

    Pour copier le "comportement" de la console d'admin sans être dans le module d'admin, je n'ai par contre pas de solution. Au mieux et au plus simple, j'aurais tendance à t'orienter vers la création d'utilisateur qui auront des droits limités sur la console d'admin.

  3. #3
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Merci DelphiManiac !
    C'est effectivement la solution que j'ai trouvée:
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        def save(self):
    	Tick=self.ticket
    	Us2=threadlocals.get_current_user()
    	if not Us2.is_staff:
    	    Us1=User.objects.get(is_superuser=True)
    	else:
    	    Us1=Tick.user
    	em11=Us1.email
    	em12=Profil.objects.get(id=Us1.id).email
    	em21=Us2.email
    	em22=Profil.objects.get(id=Us2.id).email
    	message=u'Veuillez consulter le site maisondubatiment, nouveau txt. '
    	message=message+u'Ticket: '+unicode(Tick)+u'. '
    	message=message+u'Fichier: '+unicode(self.fichier)
    	send_mail(u'Envoi txt',message,em21,[em11],fail_silently=True)
    	send_mail(u'Envoi txt',message,em22,[em12],fail_silently=True)
    	super(Txt,self).save()
    Pour copier le "comportement" de la console d'admin sans être dans le module d'admin, je n'ai par contre pas de solution.
    J'ai pu constater que sur les forums américains la demande est assez forte aussi pour un accès 'read-only' à la console admin. Rien de satisfaisant pour l'instant je vais examiner ta proposition.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  4. #4
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Salut,

    à chaque fois qu'un objet est sauvegardé, un signal est émis, tu peux créer une fonction dans ton models.py pour envoyer un mail et la connecté au signal qui va bien...

    Je n'ai pas testé mais la théorie est là...

    EDIT: j'ai testé et cela fonctionne bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    from django.db import models
    from django.contrib import admin
     
    from django.db.models.signals import pre_save
     
    class Action(models.Model):
     
        label = models.CharField(max_length=64)
     
        def __unicode__ (self):
            return self.label
     
    admin.site.register(Action)
     
    def my_handler(sender, **kwargs):
     
        try:
            instance = kwargs['instance']
            f = open('/home/pacificator/log.txt', 'a')
            f.write(unicode(instance))
            f.write('\n')
            f.close()
        except:
            pass
     
    pre_save.connect(my_handler, sender=Action)

  5. #5
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Merci Pacificator !
    Momentanément mon problème est résolu, mais ce que tu m'apprends est fort intéressant, et pourra resservir bientôt.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

Discussions similaires

  1. [Joomla!] acces à l'interface administrateur
    Par eloufirhatim dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 09/10/2013, 17h24
  2. Interface web : Django Authentification
    Par data-mining dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 09/04/2011, 15h44
  3. Réponses: 2
    Dernier message: 17/01/2011, 22h04
  4. Question interface administrateur.
    Par dimebagplan dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2009, 17h10
  5. Mise en page Interface Admin Django
    Par jacquesdx dans le forum Django
    Réponses: 2
    Dernier message: 21/01/2009, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo