Django – le modèle de données

Bienvenu dans le quatrième article consacré à Django.

Nous allons voir une des forces de Django : l’abstraction de la base de données. Django utilise un fichier modele.py, qui défini clairement les objets du projet. Tout comme le Python, Django est très orienté objet. Ici nous ne verrons pas de requêtes sql, de connexion à la base de données, ou de commit Cela pourrait paraître comme une limitation mais Django à été pensé et construit pour cela, vous avez donc une multitude d’outils pour aller aussi loin que vous le voulez.

Pour illustrer cela, nous allons créer une liste de note puis l’afficher.
Je considère que vous avez une base de donnée MySQL installée sur votre machine.

Premièrement, il faut définir la base de données dans le fichier settings.py :

            DATABASES = {
                    'default': {
                        'ENGINE':   'mysql',
                        'NAME':     'django_db',                      
                        'USER':     'root',                      
                        'PASSWORD': 'root',                  
                        'HOST': '',                      
                        'PORT': '',                      
                    }
                }

Donc ici j’ai créer un schéma qui se nomme django_db sur ma base de donnée MySQL.
Ces données sont utilisé pour que Django dialogue avec votre base de données, comme vous pouvez le voir, votre projet pourra aussi bien tournée sur MySQL que sqlite3 ou encore oracle sans changer une seule ligne de code !

Maintenant que le paramétrage est fait, ouvrer le fichier models.py et copier le code suivant :

            from django.db import models
             
            class Note(models.Model):
                libelle = models.CharField(max_length=200)
                status =  models.IntegerField()
                 
                def __unicode__(self):
                    return self.libelle

Il faut déclarer notre application dans le fichier de configuration :

            INSTALLED_APPS = (
                'django.contrib.auth',
                'django.contrib.contenttypes',
                'django.contrib.sessions',
                'django.contrib.sites',
                'django.contrib.messages',
                'django.contrib.staticfiles',
                'myapp',
                # Uncomment the next line to enable the admin:
                # 'django.contrib.admin',
                # Uncomment the next line to enable admin documentation:
                # 'django.contrib.admindocs',
            )

Je déclare donc une nouvelle class Note avec deux attributs : libelle qui sera le texte de la note et le status pour savoir si c’est fait ou pas. la fonction __unicode__ nous servira pour plus tard, c’est le texte qui sera renvoyé pour l’objet.

Nous arrivons à une phase typique de Django : le liens avec la base de données à été défini ainsi que notre modèle, Django est donc capable de créer la base de données.

Taper la commande suivante :

            manage.py syncdb

Penser à installer le support de mysql pour python. (http://www.codegood.com/archives/129)

            d:\DEV\mysite>manage.py syncdb
            Creating tables ...
            Creating table auth_permission
            Creating table auth_group_permissions
            Creating table auth_group
            Creating table auth_user_user_permissions
            Creating table auth_user_groups
            Creating table auth_user
            Creating table auth_message
            Creating table django_content_type
            Creating table django_session
            Creating table django_site
            Creating table myapp_note
           
            You just installed Django's auth system, which means you don't have any superuse
            rs defined.
            Would you like to create one now? (yes/no): yes
            Username (Leave blank to use 'administrateur'): root
            E-mail address: cedric.salaun@gmail.com
            Password:
            Password (again):
            Superuser created successfully.
            Installing custom SQL ...
            Installing indexes ...
            No fixtures found.

Comme vous pouvez le constater, Django met en place plusieurs tables que nous n’avons pas défini, ce sont des tables « système » qui sont là pour nous facilité la vie, par exemple pour la gestion des utilisateurs, la gestions des droits etc… La seule ligne qui nous intéresse vraiment ici c’est Creating table myapp_note Pour la création de notre table Note.

Nous avons vu dans cette article, comment mettre en place une base de données avec Django, nous verrons dans le prochaine article comment manipuler les tables et ajouter des données avec l’administration de Django.

Laisser un commentaire