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

/lettings/

lettings:index

Liste de toutes les locations

/lettings/<id>/

lettings:letting

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

/profiles/

profiles:index

Liste de tous les profils

/profiles/<username>/

profiles:profile

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.html

Exemple 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.html

Context :

{
    '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.html

Context :

{
    '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.html

Context :

{
    '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.html

Context :

{
    '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() échoue

  • Model.objects.get() lève DoesNotExist

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']