Modifications entre les versions 14 et 15
Version 14 à la date du 2012-08-30 01:46:55
Taille: 6923
Éditeur: DavinBaragiotta
Commentaire: admin (fin)
Version 15 à la date du 2012-08-30 01:57:08
Taille: 7608
Éditeur: DavinBaragiotta
Commentaire: réorg + ModelAdmin (admin pimpé)
Texte supprimé. Texte ajouté.
Ligne 85: Ligne 85:
== PARTIE 2 : HANDS-ON : PROJET ET APPLICATIONS == == PARTIE 2 : PROJET ET APPLICATIONS ==
Ligne 184: Ligne 184:
== PARTIE 3 : BACKEND (ADMIN) ==
Ligne 261: Ligne 263:

=== Backend pimpé : ModelAdmin ===

https://docs.djangoproject.com/en/1.4/ref/contrib/admin/

 * ligue/admin.py

 * classes EtablissementAdmin, PersonneAdmin
  ''héritent de ModelAdmin''
  {{{
class EtablissementAdmin(admin.ModelAdmin):
    pass

class PersonneAdmin(admin.ModelAdmin):
    pass
}}}

 * enregistrer Modele avec ModeleAdmin
  {{{
admin.site.register(Etablissement, EtablissementAdmin)
admin.site.register(Personne, PersonneAdmin)
}}}

 * config ModeleAdmin
 {{{
list_display
search_fields
list_filter
}}}

 * plus?
  https://docs.djangoproject.com/en/1.4/ref/contrib/admin/
  * fields
  * fieldsets
  * ...

Django : Architecture d'un projet, Backend (admin)


INTRODUCTION

  • Objectifs
    • connaître l'architecture d'un projet : principaux fichiers
    • gérer les données dans le backend (admin)

  • Documentation
  • Environnement technique
    • Python >= 2.5

    • Django 1.4
    • South 0.7.4 (optionnel, recommandé)
    • Vérification des versions :
      • >>> import django
        >>> django.get_version()
        '1.4'
        >>> import south
        >>> south.__version__
        '0.7.4.'
  • Django : version recommandée à l'AUF
    • la version qui vient avec debian sur les serveurs de production
    • sauf si vous êtes prêt à assurer une maintenance manuelle de Django


PARTIE 1 : DÉVELOPPEMENT WEB AVEC DJANGO : ARCHITECTURE D'UN PROJET

Développement web

  • schéma : le développement web

    • rôle d'un framework web : aider à construire réponse à une requête
  • environnements
    • développement (DEV)
    • déploiement (PROD, TEST)

Django

Pourquoi Django vs autre framework (ex.: CherryPy, Pyramid, web2py)

  • tout-en-un
  • admin : meilleur vendeur ;)

  • docs
  • communauté : utilisation répandue

Principaux fichiers

  • urls.py
  • views.py
  • models.py
  • templates (HTML)
  • admin.py

Projet : définition du besoin

La Direction de l'AUF souhaite pouvoir créer une cartographie des établissements membres de l'AUF.

(Un projet de cette nature existe réellement, il s'agit ici d'une simplification pour travailler sur un projet vraisemblable.)

On veut gérer :

  • quels professeurs sont dans quels établissements
  • quelles formations donnent nos établissements membres
  • quels laboratoires de recherche sont dans nos établissements membres

Projet : modélisation

  • Personne
  • Etablissement
  • Formation
  • Laboratoire


PARTIE 2 : PROJET ET APPLICATIONS

Création du projet

Le projet se nomme "Cartographie des membres".

django-admin.py startproject carto
cd carto
  • survol des fichiers générés

python manage.py runserver
  • settings.py
    • DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
              'NAME': 'carto.db',                      # Or path to database file if using sqlite3.
              'USER': '',                      # Not used with sqlite3.
              'PASSWORD': '',                  # Not used with sqlite3.
              'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
              'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
          }
      }

Création d'une application

python manage.py startapp annuaire

South

  • settings.py
    • INSTALLED_APPS = (
          # ...
          'south',
      )
  • créer une migration pour une nouvelle application
    • python manage.py schemamigration annuaire --initial
    • créer une migration pour un application existante (pas le cas ici)

      • python manage.py schemamigration --auto
  • créer les tables de south
    • python manage.py syncdb
  • appliquer les migrations
    • python manage.py migrate annuaire

Si vous n'avez pas South d'installé, créez directement les tables sans suivre leur évolution:

  • création des tables dans DB correspondant à nos modèles
    • python manage.py syncdb

PARTIE 3 : BACKEND (ADMIN)

Backend : gérer les données dans l'admin

  • urls.py
    • activer admin : décommenter

      # ...
      
      from django.contrib import admin
      admin.autodiscover()
      
      urlpatterns = patterns('',
          # ...
          url(r'^admin/', include(admin.site.urls)),
      )
  • http://127.0.0.1:8000/

  • settings.py
    • INSTALLED_APPS = (
          # ...
          'django.contrib.admin',
          # ...
      )
  • créer les tables de l'admin
    • python manage.py syncdb
  • http://127.0.0.1:8000/admin/

  • annuaire/admin.py
  • http://127.0.0.1:8000/admin/

  • annuaire/models.py
    • def __unicode__(self):
          return ""  # coder ici la chaîne unicode désirée que l'on veut retourner

      ajouter des attributs (des champs) et des méthodes à nos modèles existants

      • Personne.prenom
      • Personne.date_naissance
      • Etablissement.sigle

    Si south est installé, créer et appliquer la migration :

    • python manage.py schemamigration annuaire --auto
      python manage.py migrate annuaire

    Sinon :

    • supprimer carto.db
    • (re)création de la base de DB pour avoir tables avec même structure que nos modèles modifiés
      • python manage.py syncdb
  • annuaire/models.py
    • ajouter une relation entre nos Etablissement et Personne
      • Personne.universite
    • modifier la base de données en conséquence :
      • south : créer et appliquer la migration
      • autre : supprimer la DB et syncdb
  • ajouter quelques Etablissements et Personnes dans l'admin

Backend pimpé : ModelAdmin

https://docs.djangoproject.com/en/1.4/ref/contrib/admin/


CONCLUSION : POUR CONTINUER


Ateliers/Django/Backend/Support (dernière édition le 2012-08-31 05:21:57 par DavinBaragiotta)