Interfaces de programmation
Cette section décrit l’architecture de l’application, les vues disponibles, et les interfaces de programmation internes.
Architecture de l’application
OC Lettings suit le pattern MVT (Model-View-Template) de Django :
┌─────────────┐
│ Client │ ──── HTTP Request ───▶
└─────────────┘
┌──────────────┐
│ urls.py │
│ (Routing) │
└──────────────┘
│
▼
┌──────────────┐
│ views.py │
│ (Logique) │
└──────────────┘
│
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ models.py │ │ templates/ │ │ Context │
│ (Base de │ │ (HTML) │ │ Data │
│ données) │ │ │ │ │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
▼
┌──────────────┐
│ Response │
┌─────────────┐ │ HTML │
│ Client │ ◀──── HTTP Response ──┤ │
└─────────────┘ └──────────────┘
Configuration des URLs
Routing principal
Fichier : oc_lettings_site/urls.py
from django.urls import path, include
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('profiles/', include('profiles.urls', namespace='profiles')),
path('lettings/', include('lettings.urls', namespace='lettings')),
path('admin/', admin.site.urls),
]
Application lettings
Fichier : lettings/urls.py
from django.urls import path
from . import views
app_name = 'lettings'
urlpatterns = [
path('', views.index, name='index'),
path('<int:letting_id>/', views.letting, name='letting'),
]
Namespace : lettings
URLs disponibles :
URL |
Nom |
Description |
|---|---|---|
|
|
Liste de toutes les locations |
|
|
Détail d’une location spécifique |
Application profiles
Fichier : profiles/urls.py
from django.urls import path
from . import views
app_name = 'profiles'
urlpatterns = [
path('', views.index, name='index'),
path('<str:username>/', views.profile, name='profile'),
]
Namespace : profiles
URLs disponibles :
URL |
Nom |
Description |
|---|---|---|
|
|
Liste de tous les profils |
|
|
Détail d’un profil utilisateur |
Vues (Views)
Application principale
Fichier : oc_lettings_site/views.py
- index(request)
Affiche la page d’accueil du site OC Lettings.
- Paramètres:
request (HttpRequest) – L’objet HttpRequest de Django
- Renvoie:
Page HTML d’accueil rendue
- Type renvoyé:
HttpResponse
Template :
templates/index.htmlExemple d’utilisation :
# Dans urls.py path('', views.index, name='index')
Application lettings
- lettings.views.index(request)
Affiche la liste de toutes les locations disponibles.
- Paramètres:
request (HttpRequest) – L’objet HttpRequest de Django
- Renvoie:
Page HTML avec la liste des lettings
- Type renvoyé:
HttpResponse
Template :
lettings/templates/lettings/index.htmlContext :
{ 'lettings_list': [<Letting>, <Letting>, ...] }
Requête ORM :
lettings_list = Letting.objects.all()
- lettings.views.letting(request, letting_id)
Affiche le détail d’une location spécifique.
- Paramètres:
request (HttpRequest) – L’objet HttpRequest de Django
letting_id (int) – ID de la location à afficher
- Renvoie:
Page HTML avec les détails du letting
- Type renvoyé:
HttpResponse
- Lève:
Http404 – Si le letting_id n’existe pas
Template :
lettings/templates/lettings/letting.htmlContext :
{ 'title': "Comfortable studio", 'address': <Address object> }
Requête ORM :
letting = Letting.objects.get(id=letting_id)
Application profiles
- profiles.views.index(request)
Affiche la liste de tous les profils utilisateurs.
- Paramètres:
request (HttpRequest) – L’objet HttpRequest de Django
- Renvoie:
Page HTML avec la liste des profils
- Type renvoyé:
HttpResponse
Template :
profiles/templates/profiles/index.htmlContext :
{ 'profiles_list': [<Profile>, <Profile>, ...] }
Requête ORM :
profiles_list = Profile.objects.all()
- profiles.views.profile(request, username)
Affiche le détail d’un profil utilisateur spécifique.
- Paramètres:
request (HttpRequest) – L’objet HttpRequest de Django
username (str) – Nom d’utilisateur du profil
- Renvoie:
Page HTML avec les détails du profil
- Type renvoyé:
HttpResponse
- Lève:
Http404 – Si le username n’existe pas
Template :
profiles/templates/profiles/profile.htmlContext :
{ 'profile': <Profile object> }
Requête ORM :
profile = Profile.objects.get(user__username=username)
Gestion des erreurs
Pages d’erreur personnalisées
404 - Page non trouvée
Template : templates/404.html
Déclenchée automatiquement quand :
URL inexistante
get_object_or_404()échoueModel.objects.get()lèveDoesNotExist
500 - Erreur serveur
Template : templates/500.html
Déclenchée en cas d’exception non gérée.
Configuration requise
# settings.py
DEBUG = False # En production uniquement
ALLOWED_HOSTS = ['votre-domaine.com']