400 likes | 698 Views
Soutenance Stage L3 INFO Guillaume Ansel. Création d’un site Internet dynamique avec le framework Django. Plan. Introduction Présentation du sujet choisi Conception Générale Conception Détaillée Synthèse Conclusion. 1. Introduction. 1. Introduction. Stage de Licence Informatique
E N D
Soutenance Stage L3 INFO Guillaume Ansel Création d’un site Internet dynamique avec le framework Django
Plan • Introduction • Présentation du sujet choisi • Conception Générale • Conception Détaillée • Synthèse • Conclusion Guillaume Ansel
1. Introduction Guillaume Ansel
1. Introduction • Stage de Licence Informatique • Durée : 10 semaines • Sujet : « Création d’un site Internet dynamique pour la société Studio Odyssée » • Entreprise d’accueil : Studio Odyssée • Encadrement : Virginie MARION-POTY Guillaume Ansel
2. Présentation du sujet Guillaume Ansel
2. Présentation du sujet • « Création d’un site Internet pour la société Studio Odyssée » Guillaume Ansel
2. Présentation du sujet • Présentation des activités de la société • Logiciel • Internet • Infographie • Marketing & Communication • Site dynamique • Contenu dynamique • Espace client Guillaume Ansel
3. Conception Générale Guillaume Ansel
3. Conception Générale3.1 Les outils • Développement du site avec le langage Python • Utilisation du framework web Django (pre-1.0) • Gestion des sources avec Subversion • Codage des pages en XHTML 1.0 • Mise en page avec les feuilles de style CSS (Cascading Style Sheets) Guillaume Ansel
3. Conception Générale3.2 Le framework • Le développement du site s’appuie sur l’utilisation du framework django. • Nombreux avantages : • Inclus un ORM (Object-RelationalMapping) • Interface d’administration générée automatiquement • Gestion des URL propre • Système de template puissant • (Système de mise en cache) • (Internationalisation) Guillaume Ansel
3. Conception Générale3.3 Le principe • Conception proche du système MVC (Modèle Vue Contrôleur) Guillaume Ansel
3. Conception Générale3.3 Le principe Modèle • Couche de données • Encapsulées dans des objets grâce à l’ORM • Abstraction par rapport au support de stockage • Gestion des liaisons de type : • Un à Un • Un à Plusieurs • Plusieurs à Plusieurs • Gestion des contraintes d’intégrités • Django créé la BDD à partir des modèles Guillaume Ansel
3. Conception Générale3.3 Le principe Vue • Correspond à une page Web offrant un service spécifique • Définit quelle données doit être affichées et renvoie une réponse HTTP. • Différente réponse HTTP selon les cas : • 200: requête valide contenant la page demandée • 403: requête non autorisée • 404: la page demandée n’existe pas • 500: erreur dans l’exécution du code de la vue • D’autres type de réponses si besoin Guillaume Ansel
3. Conception Générale3.3 Le principe Contrôleur • N’apparait pas explicitement du point de vue du développeur • Peut-être considéré comme étant le framework lui-même • Redirige les URL vers la vue correspondante • Django utilise une interprétation différente du patron de conception original MVC, plus proche des besoins des auteurs du framework. Guillaume Ansel
3. Conception Générale3.3 Le principe Template • Présentation des données • Langage de template puissant • Structure conditionnelle • Boucle • Héritage • Filtres • Sortie en format texte • HTML • CSV • Texte Guillaume Ansel
4. Conception Détaillée Guillaume Ansel
4. Conception Détaillée4.1 Les applications Projet vs Application • Un projet regroupe un ensemble de fonctionnalités • Les fonctionnalités peuvent être regroupées dans des applications • Une application peut-être partagée par plusieurs projets différents • Nom du projet: studioodyssee Guillaume Ansel
4. Conception Détaillée4.1 Les applications Guillaume Ansel
4. Conception Détaillée4.2 Diagramme de classe UML Guillaume Ansel
4. Conception Détaillée4.3 Fonctionnement nominal Guillaume Ansel
4. Conception Détaillée4.4 Exemple Modèle: Billet class Billet(models.Model): titre = models.CharField(u’Titre’, max_length=128) contenu = models.TextField(u’Contenu’) contenu_html = models.TextField(editable=False) auteur = models.ForeignKey(User) publication_date = models.DateField(u’Date de publication’, auto_now_add=True) defsave(self): self.contenu_html = textile(self.contenu) super(Billet, self).save() Guillaume Ansel
4. Conception Détaillée4.4 Exemple Vue:liste_billet defliste_billet(request): try: billets = Billet.objects.all().order_by(‘-publication_date’) except: raiseHttp404 return render_to_response(‘liste_billet.html’, {‘billets’:billets,}, \ context_instance = RequestContext(request)) Guillaume Ansel
4. Conception Détaillée4.4 Exemple Template: liste_billet.html <!DOCTYPE html> <html lang="fr"> <head> <title>Studio Odyssée - Un Projet</title> </head> <body> <div id="liste-billet">{% for billet in billets %} <h2>{{ billet.titre }}</h2> <span class="auteur">{{ billet.auteur }}</span> {{ billet.contenu_html|safe }} {% endfor %}</div> </body> </html> Guillaume Ansel
4. Conception Détaillée4.4 Exemple Résultat: <!DOCTYPE html> <html lang="fr"> <head> <title>Studio Odyssée - Un Projet</title> </head> <body> <div id="liste-billet"> <h2>Billet 1</h2> <span class="auteur">Guillaume</span> <p>contenu premier billet.</p> <h2>Billet 2</h2> <span class="auteur">Guillaume</span> <p>contenu deuxième billet.</p> </div> </body> </html> Guillaume Ansel
4. Conception Détaillée4.5 Déploiement En cours de développement • Serveur web Python fournit par le framework • Pas besoin de serveur Web dédié (Apache, LighTPD) • Configuration automatique (d’après le fichier settings.py) • Interface sur 127.0.0.1:8000 par défaut • Mais pas utilisable en production Guillaume Ansel
4. Conception Détaillée4.5 Déploiement En production • Méthode recommandée : Apache + mod_python • Django est compatible avec les protocoles WSGI (CGI,FastCGI, SCGI) • Hébergement djangohosting.ch • Mise en place du site sur un serveur Web LighTPD • Interface FastCGI entre LighTPD et le processus django Guillaume Ansel
4. Conception Détaillée4.5 Déploiement En production Requête HTTP Processus django FastCGI LighTPD socket Réponse HTTP Guillaume Ansel
5. Synthèse Guillaume Ansel
5. Synthèse Préparation • Installation des composants Développement • Découpage en applications • Choix des URL • Création des modèles de données • Ecriture des vues • Rédaction des templates associées Déploiement • Apache + mod_python • LighTPD + FastCGI Guillaume Ansel
6. Conclusion Guillaume Ansel
6. Conclusion • Projet intéressant car s’inscrivant dans le cadre d’une création d’entreprise • Cadre de travail intéressant, participation active dans les choix techniques • Apprentissage d’un nouveau langage de programmation (Python) • Nouvelle technique de développement basé sur l’utilisation du framework django (DRY « Don’tRepeatYourself») Guillaume Ansel
Questions ? Guillaume Ansel