Re: Builder de GUI pour gestion de base de données

Top Page

Reply to this message
Author: pvergain
Date:  
To: guilde
Subject: Re: Builder de GUI pour gestion de base de données
Le 15/11/2014 12:16, Frédéric a écrit :
> Le samedi 15 novembre 2014, pvergain a écrit :
>
>> L'utilitaire inspectdb de Django est aussi très intéressant: il
>> permet de produire tous les modèles (models.py) d'une base de données
>> existante. Ensuite il est possible de produire très rapidement (à la
>> main) les fichiers admin.py correspondant à l'administration de la
>> base.
> Ouaou, très intéressant, ça ! Je creuse...


En gros, les étapes pour produire une interface de gestion d'une base de données
existante avec Django sont les suivantes:


- Installation de Django dans un environnement virtuel

voir:

- https://www.python.org/dev/peps/pep-0405/
- http://www.marinamele.com/taskbuster-django-tutorial/taskbuster-working-environment-and-start-django-project#working-environment


- Création d'un projet ('mysite') https://docs.djangoproject.com/en/1.7/intro/tutorial01/#creating-a-project


    mysite/
        manage.py
        mysite/
            __init__.py
            settings.py
            urls.py
            wsgi.py


- Modifier le fichier settings.py pour y introduire les données de connexion
à la base de données mysql (dictionnaire DATABASES)

Exemple 1:: https://docs.djangoproject.com/en/dev/ref/databases/

        # settings.py
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'OPTIONS': {
                    'read_default_file': '/path/to/my.cnf',
                },
            }
        }  



Exemple 2:: (http://stackoverflow.com/questions/19189813/setting-django-up-to-use-mysql)

       DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql', 
            'NAME': 'DB_NAME',
            'USER': 'DB_USER',
            'PASSWORD': 'DB_PASSWORD',
            'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
            'PORT': '3306',
        }
       }


- les étapes précédentes correspondent à ce qui est écrit ici
https://docs.djangoproject.com/en/1.7/howto/legacy-databases/

- création des modèles de toutes les tables en exécutant la commande::

      python manage.py inspectdb > models.py



- créer les tables de gestion internes nécessaires à Django
voir https://docs.djangoproject.com/en/1.7/howto/legacy-databases/#install-the-core-django-tables


      python manage.py migrate



- A partir de là, il faut créer une série d'applications Django
voir https://docs.djangoproject.com/en/1.7/intro/tutorial01/#creating-models

- création d'une application Django (après analyse des tables trouvées dans models.py)

      python manage.py startapp appli_1


Django produit l'arborescence suivante::

      appli_1/
        __init__.py
        admin.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py      


- le fichier appli_1/models.py est vide.
On l'initialise (copier/coller) avec une partie des tables du fichier models.py
On fait aussi des ajustements manuels du genre rajouter une méthode __str__()

Exemple:: (https://docs.djangoproject.com/en/1.7/intro/tutorial01/#playing-with-the-api)

      def __str__(self):              # __unicode__ on Python 2
          return self.question_text       



- enregistrement de l'application 'appli_1' dans le fichier settings.py::

        INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'appli_1',
        )




- le fichier nom_appli_1/admin.py est vide.
On l'initialise comme on le fait habituellement :)

- https://docs.djangoproject.com/en/1.7/intro/tutorial02/#make-the-poll-app-modifiable-in-the-admin
- https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display

Exemple de fichier admin.py

    from django.contrib import admin
    from appli_1.models import Model1



    class Model1Admin(admin.ModelAdmin):
        list_display = ('champ1', 'champ2', 'champ3')
        list_filter = ['champ1']
        search_fields = ['champ1', 'champ2']


    admin.site.register(Model1, Model1Admin)



- taper la commande::

     python manage.py migrate



- créer un administrateur
https://docs.djangoproject.com/en/1.7/intro/tutorial02/#creating-an-admin-user

    python manage.py createsuperuser



- lancer le serveur local::

      python manage.py runserver


- lancer votre navigateur web favori sur l'adresse http://127.0.0.1:8000/admin
Il est possible de donner un autre port que 8000 voir https://docs.djangoproject.com/en/dev/intro/tutorial01/#the-development-server)

Exemple pour lancer sur le port 8001::

      python manage.py runserver 8001


- voilà, on a accès à l'interface d'administration pour les tables de 'appli_1'

- on peut itèrer jusqu'à traitement de toutes les tables


--
Patrick