Modifications entre les versions 13 et 14
Version 13 à la date du 2012-08-30 19:30:50
Taille: 8748
Éditeur: DavinBaragiotta
Commentaire: màj Intro
Version 14 à la date du 2012-08-30 19:35:08
Taille: 8763
Éditeur: DavinBaragiotta
Commentaire:
Texte supprimé. Texte ajouté.
Ligne 23: Ligne 23:
  * Django 1.4   * Django 1.1.1 ou 1.4
Ligne 52: Ligne 52:
 1. ou repartir du code du projet carto de l'[[Ateliers/Django/Backend/Support|atelier Backend]] si vous l'avez suivi avant  1. ou repartir de votre code du projet carto de l'[[Ateliers/Django/Backend/Support|atelier Backend]] si vous l'avez suivi avant

Django : Frontend : interfaces publiques d'un site


INTRODUCTION

  • Objectifs
    • présenter des données dans le frontend (interface publique) avec Django
  • Documentation
    • doc : bonne version de django
    • tutoriel
      • Part 1 : créer un projet, créer une app, jouer avec ORM (API) couvert ici

      • Part 2 : backend (admin) pas couvert ici (voir atelier Backend)

      • Part 3 : frontend couvert ici, plus directement même ;)

      • Part 4 : forms et vues génériques pas couvert ici

  • Environnement technique
    • Python >= 2.5

    • Django 1.1.1 ou 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 : RAPPELS ET AMORCE DU PROJET

Rappels

  • Ces rappels couvrent les parties 1 et 2 de l'atelier Backend

    • Développement web : schéma sur le développeemnt web

    • Django : les principaux fichiers dans l'architecture d'un projet
    • Projet carto : définition du besoin et modélisation

Amorce du projet

  1. Prendre ces sources avec jeu de données (recommandé):

  2. ou repartir de votre code du projet carto de l'atelier Backend si vous l'avez suivi avant

  3. ou partir à zéro en codant le projet :
    • django-admin.py startproject carto
      cd carto
      python manage.py startapp annuaire
    • coder les modèles de l'app annuaire : annuaire/models.py :
      • from django.db import models
        
        class Etablissement(models.Model):
            def __unicode__(self):
                return self.nom
        
        class Personne(models.Model):
            def __unicode__(self):
                return self.nom
    • activer l'admin dans urls.py :
      • # ...
        
        from django.contrib import admin
        admin.autodiscover()
        
        urlpatterns = patterns('',
            # ...
            url(r'^admin/', include(admin.site.urls)),
        )
    • associer les modèles de l'app annuaire à l'admin : créer annuaire/admin.py :
      • from django.contrib import admin
        from annuaire.models import *
        
        admin.site.register(Etablissement)
        admin.site.register(Personne)
    • configurer le projet dans 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.
                 # ...
            }
        }
        
        INSTALLED_APPS = (
            # ...
            'annuaire',
            'django.contrib.admin',
            # ...
        )
    • créer les tables dans la DB
      • python manage.py syncdb
    • saisir un jeu de données dans l'admin : http://127.0.0.1:8000


PARTIE 2 : FRONTEND : PRÉSENTER LES DONNÉES

  • frontend vs backend : public/privé, métaphore de boutique/entrepôt ou de restaurant/cuisine
  • urls.py

    https://docs.djangoproject.com/en/1.3/topics/http/urls/

    • home
  • views.py

    https://docs.djangoproject.com/en/1.3/topics/http/views/

    voir tutoriel Part 3 (version shortcut)

    https://docs.djangoproject.com/en/1.3/intro/tutorial03/

    from django.shortcuts import render_to_response
    from django.template import Context, RequestContext
    
    def home(request):
        c = {}
        return render_to_response("home.html", Context(c), context_instance = RequestContext(request))
  • templates

    https://docs.djangoproject.com/en/1.3/topics/templates/

    • créer répertoire templates
    • settings.py
      import os
      TEMPLATE_DIRS = (
          # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
          # Always use forward slashes, even on Windows.
          # Don't forget to use absolute paths, not relative paths.
          os.path.join(os.path.dirname(__file__), "templates"),
      )
    • templates/home.html
  • views.py

    passer une variable au template

  • templates/home.html

    utiliser une variable :

    {{ var }}
  • views.py

    endroit où on code la logique en Python...

    ...plus simple si explore interactivement

    python manage.py shell
  • ORM (API) : object relationnal mapping
    from personnes.models import *
    etablissements = Etablissement.objects.all()
    for e in etablissements: print e
    e = etablissements[0]
    e.personne_set.all()
    f = Personne.objects.get(id=1)
    f.id
    f = Personne.objects.get(id=314)
    e.id
    personnes = Personne.objects.filter(etablissement__nom__contains='Alexandrie')
  • personnes/models.py
    related_name = "personnes"
  • relancer shell
    e.personnes.all()
    e.personnes.count()
  • views.py

    passer les variables pertinentes pour accueil

  • templates/home.html

    boucle for dans template :

    {% for e in etablissements %}
    {% endfor %}

PARTIE 3 : PROJET CARTO PIMPÉ

Télécharger les sources finales du projet boosté : sources finales sources.tar.gz

  • superuser dans la DB de ces sources :
    • username : giotta
    • password : admin
  • pour créer un autre superuser (le vôtre) :

    python manage.py createsuperuser

Boosté? Quoi de neuf?

Héritage de templates

  • base.html
    {% block main %}
  • templates
    {% extends "base.html" %}
    {% block main %}

Fichiers statiques : CSS, images et js

https://docs.djangoproject.com/en/1.3/howto/static-files/

  • répertoire : static
    • css
    • images
    • js
  • settings.py
    MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'media')
    MEDIA_URL = '/media/'
    
    STATIC_ROOT = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'sitestatic')
    STATIC_URL = '/static/'
    
    STATICFILES_DIRS = (
        os.path.join(os.path.dirname(__file__), "static"),
    )
  • urls.py
    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    
    urlpatterns += staticfiles_urlpatterns()

Connexion du user

  • templates
    • connexion.html
    • deconnexion.html
  • urls.py
    • connexion
    • deconnexion
  • settings.py
    LOGIN_REDIRECT_URL = "/"

URL avec paramètres

  • pages de détail : capter l'id de l'objet
    • urls.py : import des urls de l'app personnes
    • personnes/urls.py
    • personnes/views.py
    • templates/personnes/*

À faire : booster Admin : ModelAdmin

Charger données initiales : fixtures

https://docs.djangoproject.com/en/1.3/ref/django-admin/

  • créer répertoire fixtures à la racine
    python manage.py dumpdata > initial_data.json
  • mettre initial_data.json dans fixtures
  • pour récupération data :
    python manage.py syncdb
    no (pas créer user)
    python manage.py loaddata fixtures/initial_data.json

PARTIE 4 : HANDS-ON : CRÉER L'APPLICATION FORMATION POUR LE PROJET RÉPERTOIRE

Ajouter modèle Formation

  • Formation
    • nom
    • date_debut
    • date_fin
    • etablissement

Autre exercice : durée d'une Formation

  • Formation.duree()
    """Durée prévue en fonction des dates de début et de fin"""

CONCLUSION : POUR CONTINUER

Ateliers/Django/Frontend/Support (dernière édition le 2012-08-31 16:43:35 par DavinBaragiotta)