# Exo 4.1 "Projet Django" - BOICHÉ Gauvain

Je déclare n'avoir pas utilisé l'IA sur ce projet au profit de la [documentation du cours](https://github.com/Laudroid/Live-Python-Web/blob/main/4-1-5-Cr%C3%A9ation-de-pages-web-simples-et-ge.md) et [celle de Django](https://docs.djangoproject.com/fr/3.1/ref/contrib/auth/).

# Exo 4.2 "Lister des équipements" - BOICHÉ Gauvain

Je déclare avoir utilisé l'IA dans ces cadres :

## Raison 1

Génération de "list.html"

### Pourquoi ?

Je n'aime pas l'HTML.

### Ce que j'en ai retenu

Tout le contenu donné semble correct.

## Raison 2

Pour déboguer la raison pour laquelle mon fichier "list.html" n'était pas trouvé par le projet.

### Ce que l'IA m'a répondu

> The template parc/list.html exists at templates/parc/list.html, but Django's app_directories loader is searching inside each app's own templates/ folder — not the project-level one.

> Fix: declare the project-level templates directory in TEMPLATES settings.

### Ce que j'ai rajouté

De :

```
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
```

à :

```
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [BASE_DIR / "templates"],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]
```

### Conséquences

Ca ne marchait toujours pas, et l'IA m'a mis sur une piste à la noix qui n'est pas évidente : j'ai réorganisé un peu mon arborescence, et dans `settings.py` je devais faire ça :

```
# BASE_DIR = Path(__file__).resolve().parent.parent  # old
BASE_DIR = Path(__file__).resolve().parent.parent.parent  # new: 4_1/
```

# Exo 5.1 "Exiger Auth" - BOICHÉ Gauvain

Je déclare n'avoir pas usé d'IA au profit [de la documentation officielle](https://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication).

Par contre je déclare l'avoir utilisé hier soir pour mettre tout d'a-plomb pour faire marcher l'application, en générant les patrons HTML notamment.

# Exo 5.2 "Cloisonner" - BOICHÉ Gauvain

J'allais l'utiliser, mais j'ai décidé de relire le cours pour `perform_create`. Des fois je pense que tout est trop compliqué.

# Exo 5.3 "Propiétés sensibles"

Je n'ai pas utilisé d'IA... en fait j'avais déjà fait ça :

```
from rest_framework     import serializers
from .models            import Equipment

class EquipmentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Equipment
        fields = ["id", "hostname", "ip", "is_active"]
        # fields = ["id", "hostname", "description", "date_ajout", "is_active"]
```

Pris d'un cours précédent. Sécurité béton accidentelle.

### Si, j'en ai usé : Raison 1

Je voulais un script qui génère des utilisateurs, les jetons et tout directement après un gros HARD-RESET du projet (restructuration des dossiers)

### Raison 2

En voulant créer, depuis le compte "Bob" un équipement avec "owner": "Alice", j'obtiens malgré tout une réponse 201. Maintenant, la sécurité "marche" en soit parce que le "owner" passe à "Bob". Autant il ne peut PAS créer de réponse en tant qu'Alice, autant... et bien ce n'est pas ce que j'ai demandé.

J'ai passé l'info à une IA et elle a voulu tout ré-écrire pour... permettre à Bob de le faire pour Alice. J'ai reprécisé 4 fois le périmètre, pas moyen de lui faire comprendre.

J'ai fini par lui insulter ses grands morts et j'ai laissé comme ça.

# Eco 5.4 "Limiter conso"

Pas d'IA.

# Exo 5.5 "Durcir config"

## Raison 1

Usage pour bien définir les CORS et les hôtes.

### Avant

ALLOWED_HOSTS = ["127.0.0.1", "http://127.0.0.1", "localhost"]
CORS_ALLOWED_ORIGINS = ["127.0.0.1", "http://127.0.0.1", "localhost"]

### Après

```
ALLOWED_HOSTS = ["127.0.0.1", "localhost"]
CORS_ALLOWED_ORIGINS = ["http://127.0.0.1:8000", "http://localhost:8000"]
```

## Raison 2

Pour la journalisation, parce que c'était chaud comme bloc.

# Exo 5.6

Pas eu le temps.