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