Tutoriels

Mise en place du système d’authentification intégré de Django

M

Objectifs :

  • Comprendre les bases de l’authentification dans Django.
  • Configurer le système d’authentification par défaut de Django.
  • Créer des vues pour gérer les actions liées à l’authentification (inscription, connexion, déconnexion).
  • Personnaliser le modèle utilisateur si nécessaire.

Prérequis :

  • Une installation fonctionnelle de Django.
  • Des connaissances de base en Python et en développement web.
  • Une compréhension de la structure d’un projet Django (applications, modèles, vues, URL).

Étapes :

1. CREATION D’une nouvelle application dans votre projet

Dépalcez vous à la racine dans votre projet et utiliser la commande suivante pour créer une nouvelle application

python manage.py startapp users

Ouvrez le fichier settings.py de votre projet et assurez-vous que les applications nécessaires sont ajoutées à la liste INSTALLED_APPS :

INSTALLED_APPS = [
    # ...
    'django.contrib.auth' # application pour gérer l'authentification
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users',  # Votre application
    # ...
]

2. Configuration des middlewares

Vérifiez que les middlewares liés à l’authentification sont présents dans votre configuration :

MIDDLEWARE = [
    # ...
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # ...
]

3.Création des formulaires d’inscription et de connexion

Dans user/forms.py, créez des formulaires basés sur les formulaires intégrés de Django :

from django import forms
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth.models import User

class CustomUserCreationForm(UserCreationForm):
    class Meta:
        model = User  # Utilise le modèle utilisateur par défaut
        fields = ('username', 'email', 'password1', 'password2')

4. Création des vues pour l’inscription, la connexion et la déconnexion

Dans users/views.py, définissez les vues correspondantes :

from django.shortcuts import render, redirect
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.forms import AuthenticationForm
from .forms import CustomUserCreationForm

def register_view(request):
    if request.method == 'POST':
        form = CustomUserCreationForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return redirect('home')  # Remplacez 'home' par le nom de votre vue d'accueil
    else:
        form = CustomUserCreationForm()
    return render(request, 'register.html', {'form': form})

def login_view(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return redirect('home')  # Remplacez 'home' par le nom de votre vue d'accueil
    else:
        form = AuthenticationForm()
    return render(request, 'login.html', {'form': form})

def logout_view(request):
    logout(request)
    return redirect('login')  # Redirige vers la page de connexion après la déconnexion

5. Configuration des URL

Dans users/urls.py, définissez les chemins pour les vues :

from django.urls import path
from .views import register_view, login_view, logout_view

urlpatterns = [
    path('register/', register_view, name='register'),
    path('login/', login_view, name='login'),
    path('logout/', logout_view, name='logout'),
]

Ensuite, incluez ces URL dans le fichier urls.py principal de votre projet :

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('users/', include('users.urls')),
    path('', include('django.contrib.auth.urls')),  # Pour les vues d'authentification intégrées
]

6- Création des templates

Créez un répertoire templates/users/ et ajoutez-y les fichiers register.html et login.html. Par exemple, pour register.html :

<!DOCTYPE html>
<html>
<head>
    <title>Inscription</title>
</head>
<body>
    <h2>Inscription</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">S'inscrire</button>
    </form>
</body>
</html>

Et pour login.html

<!DOCTYPE html>
<html>
<head>
    <title>Connexion</title>
</head>
<body>
<h2>Connexion</h2>
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Se connecter</button>
</form>
<p>Pas encore inscrit ? <a href="{% url 'register' %}">S'inscrire</a></p>
</body>
</html>

7- Configuration des redirections après connexion/déconnexion

Dans settings.py, vous pouvez définir les redirections après connexion et déconnexion :

LOGIN_REDIRECT_URL = 'home'  # Redirige vers la vue 'home' après connexion
LOGOUT_REDIRECT_URL = 'login'  # Redirige vers la vue 'login' après déconnexion

8- Protection des vues nécessitant une authentification

Pour restreindre l’accès à certaines vues aux utilisateurs authentifiés, utilisez le décorateur login_required :

Lancez votre application et http://127.0.0.1:8000/users/register/ et http://127.0.0.1:8000/users/login/

Tutoriels