Analyse de la structure du projet Django
En comprenant la structure d'un projet Django, nous pouvons organiser le code plus efficacement, suivre les bonnes pratiques de Django et créer des applications web maintenables.
Dans le chapitre précédent, nous avons appris à utiliserdjango-admin startprojectLorsque la commande crée un nouveau projet, Django génère automatiquement la structure de base suivante :myproject/
│
├── manage.py
└── myproject/
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
Utilisez django-admin pour créer le projet HelloWorld :
django-admin startproject HelloWorld
Après la création, nous pouvons afficher la structure des répertoires du projet :

| Fichier/répertoire | Description détaillée |
|---|---|
manage.py | L'outil de gestion en ligne de commande pour les projets Django, qui encapsuledjango-admindes fonctionnalités, et définit automatiquementDJANGO_SETTINGS_MODULELa variable d'environnement pointe vers la configuration du projet actuel. Toutes les commandes de gestion du projet sont exécutées via celui-ci, comme :- runserver: Démarrer le serveur de développement- makemigrations: Générer les fichiers de migration de la base de données- shell: Lancer le shell Python avec l'ORM |
db.sqlite3 | Le fichier de base de données SQLite utilisé par Django par défaut, qui est automatiquement généré après la première exécution demigrateIl est automatiquement généré après l'exécution de la commande. Il convient aux environnements de développement ; pour la production, il est recommandé de passer à PostgreSQL/MySQL. L'emplacement du fichier est déterminé parsettings.pyinDATABASES['default']['NAME']définition. |
__pycache__/ | Répertoire de cache de bytecode généré par l'interpréteur Python, contenant.pycfichier, utilisé pour accélérer le chargement des modules. Il n'a pas besoin d'être validé dans le contrôle de version (devrait être dans.gitignoreignoré dans). |

Analyse des fichiers principaux
manage.py
manage.pyest le point d'entrée de l'outil en ligne de commande pour les projets Django, qui fournit de nombreuses commandes utiles :
Exemple
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
try:
from django.core.management import execute_from_command_line
except ImportError:
# Gérer les erreurs d'importation
pass
execute_from_command_line(sys.argv)
Exemples de commandes courantes :
python manage.py runserver- Démarrer le serveur de développementpython manage.py migrate- Appliquer les migrations de base de donnéespython manage.py createsuperuser- Créer un compte administrateur
settings.py
settings.pyest le fichier de configuration des projets Django, contenant tous les paramètres importants :
Exemple
DEBUG = True # Défini à True pendant le développement pour afficher les erreurs détaillées ; doit être défini à False en production.
ALLOWED_HOSTS = [] # Lorsque DEBUG=False, vous devez spécifier les domaines autorisés (par ex. ['example.com'])
INSTALLED_APPS = [
'django.contrib.admin', # Gestion de l'administration
'django.contrib.auth', # Système d'authentification
'django.contrib.contenttypes', # Framework de types de contenu
'django.contrib.sessions', # Gestion des sessions
'django.contrib.messages', # Framework de messages
'django.contrib.staticfiles', # Gestion des fichiers statiques
# Une application personnalisée peut être ajoutée : 'myapp.apps.MyAppConfig'
]
DATABASES = { # Configuration de la base de données
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3', # Utiliser la syntaxe pathlib
# Exemple MySQL :
# 'ENGINE': 'django.db.backends.mysql',
# 'NAME': 'mydb',
# 'USER': 'root',
# 'PASSWORD': 'password',
}
}
STATIC_URL = '/static/' # Préfixe d'URL des fichiers statiques
STATICFILES_DIRS = [BASE_DIR / 'static'] # Répertoire de recherche des fichiers statiques en développement
MEDIA_URL = '/media/' # Préfixe d'URL pour les fichiers téléversés par les utilisateurs
MEDIA_ROOT = BASE_DIR / 'media' # Chemin de stockage des fichiers téléversés
urls.py (répartiteur d'URL)
Exemple
from django.urls import path, include
url = [
path('admin/', admin.site.urls), # Routes d'administration
path('blog/', include('blog.urls')), # Routage d'URL de sous-application
# path('api/', include('api.urls', namespace='api')),
]
- include(): Implémente la modularisation du routage, en séparant les routes des différentes applications dans leurs fichiers urls.py respectifs.
- namespace: Utilisé pour éviter les conflits de noms lors de la résolution inverse des URL.
wsgi.py & asgi.py
| Fichier | Objectif |
|---|---|
wsgi.py | Configuration WSGI (Web Server Gateway Interface), utilisée pour les serveurs synchrones traditionnels (comme Gunicorn, uWSGI). En production, le projet est démarré via ce fichier. |
asgi.py | Configuration ASGI (Asynchronous Server Gateway Interface), prend en charge les serveurs asynchrones (comme Daphne, Uvicorn). Utilisée pour WebSocket ou les vues asynchrones. |
Répertoire d'extension (non généré automatiquement, mais couramment utilisé)
HelloWorld/ ├── apps/ # 推荐:存放所有自定义应用 │ └── blog/ # 示例应用 ├── static/ # 静态文件(CSS/JS/图片) ├── media/ # 用户上传文件 ├── templates/ # 全局模板目录 └── requirements.txt # 项目依赖列表
1. répertoire apps/ (structure recommandée)
Gérer les applications de manière centralisée, en évitant de les disperser dans le répertoire racine du projet.
Il faut configurer le chemin Python dans settings.py :
import sys sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
2. Fichiers statiques et fichiers multimédias
-
static/Stocke les fichiers CSS, JavaScript, images, etc., accessibles via STATIC_URL.
media/: Les fichiers téléversés par les utilisateurs (tels que les avatars) sont accessibles via MEDIA_URL. Le serveur doit être configuré pour fournir l'accès pendant le développement :
# urls.py(仅开发环境) from django.conf import settings from django.conf.urls.static import static urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Structure d'une application Django
Dans Django, un projet peut contenir plusieurs applications. En utilisantpython manage.py startapp myappAprès la création d'une nouvelle application, la structure suivante est générée :
myapp/ │ ├── migrations/ │ └── __init__.py ├── __init__.py ├── admin.py ├── apps.py ├── models.py ├── tests.py └── views.py
Fichiers principaux de l'application
models.py
Définit les modèles de données, correspondant aux tables de la base de données :
Exemple
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
description = models.TextField()
def __str__(self):
return self.name
views.py
Gérer la logique métier, renvoyer les réponses :
Exemple
from .models import Product
def product_list(request):
products = Product.objects.all()
return render(request, 'myapp/product_list.html', {'products':})
admin.py
Configurer le backend d'administration Django
Exemple
from .models import Product
@admin.register(register⟧)
class ProductAdmin(admin.ModelAdmin):
list_display = ('name', 'price')
Exemple de structure complète de projet
La structure complète d'un projet Django typique est la suivante :
myproject/
│
├── manage.py
├── requirements.txt
├── static/
│ ├── css/
│ ├── js/
│ └── images/
├── media/
├── templates/
│ └── base.html
└── myproject/
├── __init__.py
├── settings.py
├── urls.py
├── wsgi.py
└── asgi.py
└── myapp1/
├── migrations/
├── templates/
│ └── myapp1/
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── tests.py
├── urls.py
└── views.py
└── myapp2/
└── ... (类似结构)
Descriptions des répertoires importants
répertoire migrations
Stocke les fichiers de migration de base de données. Django utilise ces fichiers pour suivre les modifications de modèle et les synchroniser avec la base de données.
répertoire static
Stocke les fichiers statiques (CSS, JavaScript, images, etc.), qui sont collectés vers un emplacement désigné lors du déploiement.
répertoire templates
Stocke les fichiers de gabarit HTML. Django utilise le langage de gabarit pour générer dynamiquement des pages.
répertoire media
Stocke les fichiers téléversés par les utilisateurs, qui doivent être configurés dans settings.py :
Exemple
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Suggestions de bonnes pratiques
- Séparation du projet et de l'application: Maintenir l'indépendance de chaque application pour en faciliter la réutilisation
- Configuration de l'environnement: Utiliser différents fichiers de configuration pour distinguer les environnements de développement et de production
- Gestion des fichiers statiquesUtilisé pendant le développement
STATICFILES_DIRSUtilisé en productioncollectstatic - Conception des URL: Définir les URL au niveau de l'application, puis les inclure au niveau du projet
- Organisation des gabaritsCréer un sous-répertoire pour chaque application afin d'y stocker les gabarits
Différences entre les environnements de production et de développement
| Fichier/Configuration | Environnement de développement | Environnement de production |
|---|---|---|
DEBUG | True(Afficher les détails de l'erreur) | False(Masquer les erreurs, journaliser dans un fichier) |
| base de données | SQLite (par défaut) | PostgreSQL/MySQL (Optimisation des performances) |
| Fichiers statiques | runserverService automatique | UtilisationcollectstaticCollecter vers le CDN |
ALLOWED_HOSTS | Liste vide ou['localhost'] | Doit configurer le domaine (par ex.['example.com']) |