Développement Web : principes et mise en oeuvre
1. Le web
Le Web est basé sur trois piliers :
-
Les liens hypertextes sur lesquels on peut cliquer et leur protocole (HTTP)
-
le système d'adresses (URL)
-
le langage de construction des pages (HTML)
-
Le Web englobe les sites qui peuvent être consultés dans un navigateur, et n'est qu'une des briques de l'Internet
-
Parmi les autres :
-
le courrier électronique
-
les applications mobiles
-
etc.
-
source:
Un site Web consiste :
- en un ensemble de fichiers sauvegardés sur un disque dur
- contenant du code informatique appelé HTML.
- il est nécessaire d'avoir un navigateurs web (comme Chrome, Safari, Firefox, etc.) pour lire le contenu d'un site web
- les sites sont stockés sur des serveurs accessibles via le réseau internet grâce à leur adresse IP (Internet Protocol)
Origines d'Internet
- 1969 : ARPANET (l’ancêtre)
- réseau non centralisé
- communication par paquets
- pas de routes prédéterminées

InterNet = Interconnected Network

Fonctionnement d'Internet
- adresse
- routeurs
- paquets
--> fonctionnement proche du courrier postal!
Le protocole http
HTTP = Hyper Text Transfer Protocol : protocole d'échange "hyper texte"

Les URL
URL = Universal Resource Locator
- L'url est couramment appelée l'"adresse" d'un site web
- Elle contient différentes informations :
- adresse IP (nom de domaine)
- /chemin/vers/fichier
- variables
- port d'entrée
- etc.
- Exemple :
http://mon.adresse.com/mon_site.php?nom=Pignon&prenom=Francois
A D R E S S E RESSOURCE V A R I A B L E S
Une URL est une adresse web. Vous pouvez voir une URL chaque fois que vous visitez un site web. Elle est visible dans la barre d'adresse de votre navigateur.
Le HTML
HTML = HyperTexte Markup Language
Le HTML est un code :
- qui est interprété par votre navigateur (Chrome, Firefox ou Safari)
- et qui permet d'afficher une page web à l'utilisateur.
-
But de ce langage : produire des documents consultables à distance par de navigateurs Web
-
Un système de balises ("Markups") permet de décrire la mise en forme du document
-
Possibilité de définir des liens hypertexte : chaque lien permet d'accéder à de nouveaux documents
-
Possibilité de définir des formulaires qui permettent à l'utilisateur d'envoyer des informations vers le serveur
Un document HTML contient deux parties :
-
L'en-tête, qui contient des contient des informations relatives à l'auteur et au contenu du document
-
Balise
<HEAD>
-
-
Le corps, qui contient le texte et les médias à afficher, avec des indications de mise en page
-
Balise
<BODY>
-
<!DOCTYPE html>
<html>
<head>
<title>Exemple de fichier HTML valide</title>
</head>
<body>
<p> Un texte normal <br/> <em> italique </em>
<ul>
<li>un élément de liste</li>
<li><strong>du gras</strong></li>
</ul>
</p>
</body>
</html>
Structure d'une page html 5
De nombreuses ressources web sont disponibles pour apprendre le HTML, voir par exemple
Balises de formatage
<h1>Titre 1</h1>pour vos titres les plus importants<h2>Titre 2</h2>pour les sous-titres<h3>Titre 3</h3>... et ainsi de suite jusqu'à<h6><p>Un paragraphe contenant du texte</p><em>texte</em>permet de mettre l'accent sur une partie du texte<strong>texte</strong>permet de mettre encore plus l'accent sur une partie de texte<br>permet d'insérer un saut de ligne (vous ne pouvez rien mettre à l'intérieur d'un élément br et il n'y a pas de balise fermante)<a href="https://djangogirls.org">link</a>permet de créer un lien<ul><li>premier item</li><li>second item</li></ul>permet de créer des listes, comme celle que nous sommes en train de faire !
Balises de mise en page
<div></div>permet de créer une section au sein de la page<nav></nav>définit un ensemble de liens de navigation<article></article>spécifie du contenu indépendant et autonome<section></section>définit une section dans un document<header></header>spécifie un en-tête pour un document ou une section<main></main>spécifie le contenu principal d'un document<aside></aside>définit du contenu en dehors du contenu dans lequel il est placé (comme une barre latérale)<footer></footer>définit un pied de page pour un document ou une section<time></time>définit un instant spécifique (ou un horodatage)
Web statique : HTML + CSS

-
côté client :
-
construction de l'arbre DOM ⇒ bloc = objet
-
affichage (flux)
-
-
Les feuilles de style (CSS : Cascading Style Sheets) sont un langage utilisé pour décrire l'apparence et la disposition d'un site écrit en langage de balisage (comme HTML).
Exemples de CSS
body {
padding-left: 15px;
}
h1 a, h2 a {
color: #C25100;
font-family: 'Lobster';
}
em {
background‐color: black;
color: red;
}
p {
text-align: center;
}

Pages dynamiques

modification du DOM selon les événements produits par l'utilisateur
3 langages sont nécessaires pour réaliser ce schéma:
-
Les seuls langages compréhensibles pour le navigateur sont
HTMLetCSSetJavascript -
agrémenté de différentes librairies de mise en forme:
Langage javacript
But:
- Modification des blocs HTML et des propriétés CSS (l’arbre DOM)
- Programmation évènementielle : on réagit à des actions de l’utilisateur
- Transfert d’information entre le client et le serveur (ajax)
Attention :
- Javascript n'est pas Java (ca n'a rien à voir!)
- C’est un langage de script objet (comme python)
- Presque exclusivement utilisé via des
bibliothèques (comme jQuery)
voir : https://jquery.com/
exemple : https://jqueryui.com/accordion/
HTML :
- structure
- liens
- blocs
CSS :
- style
- positionnement
- couleurs, ...
javascript :
- animations
- gestion des évènements
- communication serveur
Text
Résumé
Web dynamique
Web dynamique
principe général : consultation/mise à jour à distance d'une base de données.

-
CRUD : Create / Read / Update / Delete
-
réponse = données mises en forme au niveau du serveur
Mise en oeuvre
3 niveaux d'interprétation sont nécessaires pour réaliser ce schéma:
- Un langage d'édition interprété au niveau du navigateur
-
Les seuls langages compréhensibles pour le navigateur sont
HTMLetCSSetJavascript
-
-
Un langage de développement interprété côté serveur
-
Le choix est vaste (n'importe quel langage de programmation)
-
Les plus courants sont (par ordre de popularité):
-
PHP
-
Java (avec la librairie
Spring MVC) -
Python (avec la librairie
Django) -
Javascript (librairie
Node.js) -
etc.
-
-
-
Un langage de requêtes (interprété côté serveur) pour communiquer avec la base de données et enregistrer les mise à jour
Transmission des données
Transmission de données "en clair"
Variables GET :
-
Les variables sont inscrites dans l'URL transmise au serveur:
http://mon.adresse.com/mon_site.php?nom=Pignon&prenom=Francois
A D R E S S E RESSOURCE V A R I A B L E S
Le serveur exécute le script (php, python, java, …), c'est à dire :
-
traite les variables
-
exécute des opérations de lecture/écriture
-
transmet un contenu au client (en général html mais aussi xml ou json…)
Transmission des données
Transmission de données de données par formulaire
Variables POST (n'apparaissent pas dans l'URL)
-
utilisation de Formulaires HTML :
-
le fichier cible est défini comme attribut du formulaire :
- les balises
INPUTdéfinissent les variables à transmettre: - l
'INPUTde typesubmitlance la requête : la page cible est chargée et remplace la page courante:
<FORM method="post" action="cible.php">
...
</FORM><form method ="post" action = "bonjour.php" >
Votre nom : <input type="text" name="nom"/> <br/>
Votre prénom : <input type="text" name="prenom"/> <br/>
<input type="submit" value="Envoyer">
</form>Conservation des données
-
Le web dynamique repose sur :
des données mises à jour en continu
stockées dans une base de données
et manipulées côté serveur
-
Mise en œuvre :
Node.js+Express(backend léger, moderne)MongoDB+Mongoose(ORM / ODM orienté documents)Python+ DjangoJava+ Hibernate + Spring MVC
Le patron MVC reste la référence pour organiser les applications Web modernes.
Dans l’écosystème JavaScript, on retrouve cette structure dans Express (routes = contrôleurs, modèles = Mongoose, vues = templates ou API JSON).
-
Pour une comparaison utile : le tutoriel Django reste un bon point de repère pédagogique 1871426-le-fonctionnement-de-django
Modèle - Vue - Contrôleur

Django
Django (/ˈdʒæŋɡoʊ/ jang-goh) est un framework web gratuit et open-source écrit en Python.
Un framework web est un ensemble de composants prêts à l'emploi qui vous aide à développer des sites web plus rapidement et plus facilement.
Lorsque vous créez un site web, vous avez souvent besoin de la même chose :
- une manière de gérer l'authentification de vos utilisateurs (créer un compte, se connecter, se déconnecter),
- une partie dédiée à la gestion de votre site,
- des formulaires,
- une manière de mettre en ligne des fichiers,
- etc.
Fonctionnement de Django
Django gère lui-même la partie contrôleur (gestion des requêtes du client, des droits sur les actions…).
Concrètement, lorsque l'internaute appelle une page, la vue récupère les données du modèle et génère un rendu HTML à partir du template et de ces données.
Un template est un fichier HTML, aussi appelé en français « gabarit ». Il sera récupéré par la vue et envoyé au visiteur ; avant d'être envoyé, il sera analysé et "complété" avec les données provenant du modèle.

On distingue les quatre parties qu'un développeur doit gérer :
- Le routage des requêtes, en fonction de l'URL ;
- La représentation des données dans l'application, avec leur gestion (ajout, édition, suppression…), c'est-à-dire les modèles ;
- L'affichage de ces données et de toute autre information au format HTML, c'est-à-dire les templates ;
- Enfin le lien entre les deux derniers points : la vue qui récupère les données et génère le template selon celles-ci.
Développement d'un site en Django
Les modèles dans Django
Un modèle Django est essentiellement un schéma de données
- géré par l'ORM (Object Relational Mapper) de Django,
- en lien avec une
base de données. - le gestionnaire de données SQLite est utilisé par défaut dans Django.
from django.db import models
class Equipement(models.Model):
id_equip = models.CharField(max_length=100, primary_key=True)
disponibilite = models.CharField(max_length=20)
photo = models.CharField(max_length=200)
def __str__(self):
return self.id_equip
class Animal(models.Model):
id_animal = models.CharField(max_length=100, primary_key=True)
etat = models.CharField(max_length=20)
type = models.CharField(max_length=20)
race = models.CharField(max_length=20)
photo = models.CharField(max_length=200)
lieu = models.ForeignKey(Equipement, on_delete=models.CASCADE)
def __str__(self):
return self.id_animalLa gestion des urls
Il faut renseigner une liste de modèles d'url (urlpatterns) pour faire correspondre les URL et les vues.
Django vérifie dans l'ordre les modèles d'url, et si correspondance il y a, alors il transmet la requête à la fonction associée (appelé vue).
from django.urls import path
from . import views
urlpatterns = [
path('', views.animal_list, name='animal_list'),
path('animal/<str:id_animal>/', views.animal_detail, name='animal_detail'),
path('animal/<str:id_animal>/?<str:message>', views.animal_detail, name='animal_detail_mes'),
]Vue
La vue contient toute la partie "logique" de notre application. C'est elle qui va se charger d'aller chercher les informations liées à notre modèle et de les passer à un template
from django.shortcuts import render, get_object_or_404, redirect
from .forms import MoveForm
from .models import Animal, Equipement
# Create your views here.
def animal_list(request):
animals = Animal.objects.filter()
return render(request, 'animalerie/animal_list.html', {'animals': animals})
def animal_detail(request, id_animal):
animal = get_object_or_404(Animal, id_animal=id_animal)
lieu = animal.lieu
form=MoveForm()
return render(request,
'animalerie/animal_detail.html',
{'animal': animal, 'lieu': lieu, 'form': form})Template
Les Balises de template Django permettent de transferer des variables Python dans du HTML
Pour insérer une variable dans un template, on utilise des doubles accolades avec le nom de la variable.
<header>
<h1><a href="/">Animalerie</a></h1>
</header>
{% for animal in animals %}
<article>
<h2><a href="">{{ animal.id_animal }}</a></h2>
<p>{{ animal.etat }}</p>
<p>{{ animal.lieu }}</p>
</article>
{% endfor %}
deck
By Emmanuel Dauce
deck
- 623