Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

Débuter son projet Django

Article posté le 26-09-2014 dans la catégorie Django

Attention, le contenu cet article est peut-être obsolète!

Suite de nos tutoriels sur Django, voici aujourd'hui comment débuter un projet simple.

Vous pouvez lire notre tutoriel sur les bases de Django si vous ne l'avez pas encore fait. Sinon, continuons.

1- Création du projet

Placez-vous dans votre dossier "Projets" avec la console. Nous allons créer un projet mes_images. Tapez :

django-admin.py startproject mes_images

Le dossier du projet a été créé.

Ouvrez le dossier de votre projet, vous y trouverez alors deux éléments : un fichier nommé manage.py et un autre sous-dossier qui porte le même nom que votre projet.

Ce sous-dossier contient quatre fichiers Python :

  1. settings.py
  2. urls.py
  3. wsgi.py
  4. __init__.py

Le premier contient la configuration de votre projet. Le deuxième contiendra les URL de votre site et les fonctions à appeler en conséquence. Nous verrons tout cela en détail plus loin. Quant aux deux autres fichiers, vous n'avez pas à y toucher!

Revenons au dossier principal, il y a un fichier manage.py. Ce fichier est un fichier vous permettant de gérer - en ligne de commande - votre projet. Idem, nous verrons cela plus loin. Vous n'avez pas besoin d'éditer ce fichier non plus.

Pour finir la création des dossiers, créez, dans le dossier principal, un répertoire nommés templates. Pas la peine de vous dire ce qu'il contiendra. Enfin, créez aussi un dossier "static" : il servira à contenir des fichiers statiques comme vos feuillez de styles par exemple. Chaque application (voir plus bas) pourra en contenir un. Mais dans le principal, que nous venons de créez, placez les fichiers commun à toutes vos applications!

A présent testons notre projet : dans la console, tapez :

python manage.py runserver

Ensuite, dans votre navigateur, saisissez cette URL :

http://localhost:8000/

Vous devriez voir le projet de base.

Note : la commande manage.py propose plusieurs paramètres. Le principal : help... vous permettra de dévouvrir les autres.

2- Configurer le projet

Avant de commencer, une info : certains préfèrent utiliser SQLite pour leurs tests, moi je suis plutôt mySQL quoiqu'il arrive. Aussi nous ne verrons que ce cas de figure. Sous Windows, une installation de Wamp suffit. Sous Linux, c'est également très simple, suivez juste la première étape de ce tutoriel sur LAMP.

Sachez aussi que par défaut, Django n'inclue que le module pour SQLite. Aussi vous devez installer celui pour mySQL avec cette commande :

sudo apt-get install python-mysqldb

Une fois ce pré-requis est place, passons à la configuration du projet.

Note: quand certains des éléments sont absents du fichier de configuratio, ben... rajoutez les. Utilisez les commentaires, c'est bien utile quandon reprend son travail plus tard!

Pour commencer, ouvrez le fichier settings.py. Fichier au format Python, c'est ici que se paramètre votre application. Voici les immanquables.

DEBUG = True  #Affiche les erreurs de code
TEMPLATE_DEBUG = DEBUG #Affiche les erreurs dans les templates

Attention, évidemment, quand vous passez en production, mettez tout à false! Pas la peine de vous expliquer pourquoi!

Passons ensuite au tuple (une liste de variables avec leur valeur) ADMINS. Absent ou par défaut vide, il contient les informations sur le ou les adminstrateurs du site. Voici ce que j'ai mis :

#Admin (rajout perso pour l'admin)
ADMINS = (
  ('Eric', 'contact@xxx.fr'),
)

Passons ensuite à la base de données : cette fois-ci on utilise un dictionnaire (liste de mots avec leur définition) DATABASES, qui contiendra toutes les données nécessaires pour se connecter à ala BDD.

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'DATABASE': 'base_django',
    'USER': 'root',
    'PASSWORD': 'root',
    'HOST': 'localhost',
    'PORT': '3306',
  }
}


Ensuite, passons aux informations de langue et de fuseau horaire :

TIME_ZONE = 'Europe/Paris'
LANGUAGE_CODE = 'fr-FR'

Viens ensuite le répertoire des templates, celui que nous avons créé au début de ce tutoriel : TEMPLATE_DIRS.

#Templates (rajout Eric)
TEMPLATE_DIRS = (
  '/home/Projets/enrico/mes_images/templates/',
)

Dernière étape de la configuration : forcer le slash en fin d'URL. Ceci est bien utile pour la gestion des routes, les développeurs PHP en savent quelque chose. Tiens d'ailleurs, n'avez-vous pas remarqué que ce site lui-même force le slash en fin d'URL ?

APPEND_SLASH = True  # Ajoute un slash à la fin de l'URL

Fin de cette partie de configuration. Alors bien sûr, il existe plein d'autres paramètres. Je vous laisse découvrir la documentation officielle pour cela.

3- Création de l'application

Dernière étape pour aujourd'hui : création de l'application (appelée module dans d'autres types de frameworks - voir mon premier article sur Django).

Je souhaite créer une application nommée images. Pour cela, avec la console, je me positionne dans le répertoire prinicpal de mon projet, et je tape :

python manage.py startapp images

Le répertoire de votre application est automatiquement créé. Si vous allez faire un tour dedans, vous verrez trois autres répertoires :

  1. models.py : il contiendra les modèles
  2. tests.py : servira pour les tests unitaires (nous verrons cela plus tard)
  3. views.py : contiendra toutes les vues de votre application

Dernière étape : retournez dans votre dossier de l'application principale pour rouvrir settings.py, et rajoutez votre application dans cette variable (afin que Django considère le sous-répertoires images comme une application)

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'images',
)

Note: si c'est le cas, pensez à décommenter la première ligne, celle de la partie admin, nous verrons pourquoi plus tard :p !

4- Contenu des fichiers

Voici le contenu des fichiers importants:

urls.py (du projet, pas de l'application) :

from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
    # Examples:
    # url(r'^$', 'mes_images.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', 'images.views.homeSite'),
    url(r'^images/', include('images.urls')),
]
#La partie ci-dessous concerne le chargement de fichiers statiques
from django.contrib.staticfiles import views
from mes_images import settings
if settings.DEBUG:
    urlpatterns += [
        url(r'^static/(?P<path>.*)$', views.serve),
    ]

#from django.contrib.staticfiles.urls import staticfiles_urlpatterns
#urlpatterns += staticfiles_urlpatterns()

Fichier setting.py

"""
Django settings for mes_images project.
For more information on this file, see
https://docs.djangoproject.com/en/dev/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/dev/ref/settings/
"""
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
ABSOLUTE_PATH = os.path.dirname(__file__)

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/dev/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'm(0fd^n=#!!@c_-)42*sj4fe0-9yps@k$g3^1p32bj3ln4^o%q'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
TEMPLATE_DEBUG = True
ALLOWED_HOSTS = []
#Admin (rajout Eric)
ADMINS = (
  ('Eric', 'eric@optibiz.fr'),
)

# Application definition
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'images',
)
MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)
ROOT_URLCONF = 'mes_images.urls'
WSGI_APPLICATION = 'mes_images.wsgi.application'

# Database
# https://docs.djangoproject.com/en/dev/ref/settings/#databases
DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'my_django',
    'USER': 'root',
    'PASSWORD': 'root',
    'HOST': 'localhost',
    'PORT': '3306',
  }
}
# Internationalization
# https://docs.djangoproject.com/en/dev/topics/i18n/
LANGUAGE_CODE = 'fr-FR'
TIME_ZONE = 'Europe/Paris'
USE_I18N = True
USE_L10N = True
USE_TZ = True
#######
STATIC_ROOT = os.path.join(ABSOLUTE_PATH, 'collected_static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".                                                                                                                                          
    # Always use forward slashes, even on Windows.                                                                                                                                                                   
    # Don't forget to use absolute paths, not relative paths.                                                                                                                                                        
    '/home/enrico/Projets/mes_images/static',
)

##########
#Templates (rajout Eric)
TEMPLATE_DIRS = ('/home/enrico/Projets/mes_images/templates/',)
#Rajout slash
APPEND_SLASH = True  # Ajoute un slash en fin d'URL

Cet article vous a plu? Découvrez d'autres articles


Tweet
comments powered by Disqus