Add documentation and source

Added documentation, source and extra files.
This commit is contained in:
2025-07-02 20:26:50 +02:00
parent 4fc1d36a10
commit e3ebf6bf4f
295 changed files with 24986 additions and 0 deletions

View File

@ -0,0 +1,138 @@
---
title: Django
author: Steve Kossouho
---
# Utiliser des formulaires avec la base de données
----
## Définition de formulaires basés sur les modèles
### Qu'est-ce qu'un `ModelForm` ?
Un `ModelForm` est une classe spéciale de formulaire dans Django qui génère automatiquement un formulaire à partir d'un modèle spécifié.
```python
from django import forms
from .models import MonModel
class MonModelForm(forms.ModelForm):
class Meta:
model = MonModel
fields = '__all__'
```
Ici, un formulaire est créé pour le modèle `MonModel`. L'option `fields = '__all__'` signifie que tous les champs du modèle sont inclus dans le formulaire.
----
## Utilisation des formulaires et validation
----
### Utilisation de `ModelForm` dans une vue
Un `ModelForm` peut être utilisé dans une vue de la même manière qu'un formulaire normal. Voici un exemple de vue qui utilise un `ModelForm`.
```python
from django.shortcuts import render
from .forms import MonModelForm
def ma_vue(request):
if request.method == 'POST':
form = MonModelForm(request.POST)
if form.is_valid():
form.save()
else:
form = MonModelForm()
return render(request, 'ma_template.html', {'form': form})
```
Dans cet exemple, si la requête est une requête POST et que le formulaire est valide, le modèle associé est automatiquement enregistré en base de données grâce à la méthode `form.save()`.
----
## Gestion des téléchargements
----
### Téléchargements de fichiers avec `ModelForm`
Pour gérer le téléchargement de fichiers avec un `ModelForm`, il est nécessaire d'utiliser un champ `FileField` ou `ImageField` dans le modèle. Il faut également passer `request.FILES` à l'instance `ModelForm`.
```python
class MonModel(models.Model):
mon_fichier = models.FileField(upload_to='mes_fichiers/')
# Dans la vue
def ma_vue(request):
if request.method == 'POST':
form = MonModelForm(request.POST, request.FILES)
if form.is_valid():
form.save()
else:
form = MonModelForm()
return render(request, 'ma_template.html', {'form': form})
```
Ici, si un fichier est téléchargé via le formulaire, il est automatiquement sauvegardé dans le répertoire `mes_fichiers/`.
----
# Utiliser des formulaires avec la base de données
Utiliser des formulaires qui correspondent à nos définitions de modèles est assez simple. Il suffit de créer une classe héritant de `django.forms.ModelForm`. Le formulaire correspondant contient automatiquement des champs
reflétant ceux de notre modèle.
----
## Définition de formulaires basés sur les modèles
![Définition d'un formulaire de modèle](assets/images/modelforms-definition.png)
----
## Utilisation des formulaires et validation
L'utilisation des formulaires de modèles ressemble beaucoup à l'utilisation de formulaires standard. Il existe toutefois quelques différences, notamment pour la gestion de l'enregistrement de données et la modification de données existantes.
----
![Utilisation du formulaire non lié à un objet](assets/images/modelforms-new-instance.png)
----
![Utilisation du formulaire lié à un objet](assets/images/modelforms-bind-instance.png)
----
## Gestion des téléchargements
Lorsque vous souhaitez gérer des téléchargements de fichier, vous devriez configurer deux paramètres dans votre projet, qui sont :
- Le répertoire des fichiers média : `MEDIA_ROOT`
- L'URL de base pour les afficher, `MEDIA_URL` (par défaut `"/media/"`)
- Configurer les URLs pour servir des fichiers média :
- Ajouter `+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)` aux URLs du projet pour servir les fichiers (ne fonctionne pas si `DEBUG = False`
- Avoir un formulaire HTML avec la méthode `POST` et le type d'encodage `enctype="multipart/form-data"`.
Sans `MEDIA_ROOT`, les fichiers seront uploadés et sauvés à la racine de votre projet (même pas dans un répertoire `media`), ce qui est fortement déconseillé.
----
L'avantage par rapport aux formulaires standard est que la gestion du téléchargement des fichiers se fait automatiquement
lorsque vous persistez vos données de formulaire en faisant
```python
form = MyForm(request.POST, request.FILES, instance=my_instance) # notez le request.FILES
form.save(commit=True)
```
----
Lorsque votre modèle possède des champs fichier, vous pouvez facilement accéder à l'URL du fichier uploadé en utilisant la propriété `url` du champ `FileField` ou `ImageField` :
```djangotemplate
{{ item.picture_field.url }} {# URL commençant par settings.MEDIA_URL #}
```