Exercices Django

Exercice 2 Django Framework Corrigé S1

Système d'inscription et d'authentification d'utilisateur

Objectif :

  • Gérer l'inscription, la connexion et la déconnexion des utilisateurs.

Instructions :

  1. Créez un formulaire personnalisé pour l'inscription d'utilisateur (nom d'utilisateur, mot de passe, email) en utilisant forms.py.
  2. Créez des vues pour :
    • L'inscription d'utilisateur
    • La connexion d'utilisateur
    • La déconnexion d'utilisateur
  3. Affichez les boutons de connexion et de déconnexion dans le template de navigation selon l'état de connexion de l'utilisateur.
  4. Redirigez les utilisateurs après la connexion et la déconnexion.

1. Créer un formulaire personnalisé pour l'inscription d'utilisateur

Commencez par créer un formulaire d'inscription dans un fichier forms.py dans l'application que vous utilisez pour gérer les utilisateurs (ou créez une nouvelle application users si nécessaire).

forms.py

# users/forms.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']
  • UserCreationForm est un formulaire intégré de Django qui gère la création de nouveaux utilisateurs.
  • Ici, nous avons ajouté un champ pour l'email et spécifié les champs que nous voulons dans le formulaire.

2. Créer des vues pour l'inscription, la connexion et la déconnexion

Dans le fichier views.py de l'application users, créez des vues pour gérer l'inscription, la connexion et la déconnexion.

views.py

# users/views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth import login, authenticate, logout
from django.contrib.auth.forms import AuthenticationForm
from .forms import UserRegisterForm

# Vue pour l'inscription
def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            messages.success(request, f'Compte créé pour {username} ! Vous pouvez maintenant vous connecter.')
            return redirect('login')
    else:
        form = UserRegisterForm()
    return render(request, 'users/register.html', {'form': form})

# Vue pour la connexion
def login_view(request):
    if request.method == 'POST':
        form = AuthenticationForm(request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                messages.success(request, f'Vous êtes connecté en tant que {username}.')
                return redirect('home')
            else:
                messages.error(request, 'Nom d\'utilisateur ou mot de passe invalide.')
        else:
            messages.error(request, 'Nom d\'utilisateur ou mot de passe invalide.')
    else:
        form = AuthenticationForm()
    return render(request, 'users/login.html', {'form': form})

# Vue pour la déconnexion
def logout_view(request):
    logout(request)
    messages.success(request, 'Vous avez été déconnecté.')
    return redirect('home')
  • register : gère l'inscription de l'utilisateur. Si le formulaire est valide, l'utilisateur est enregistré dans la base de données.
  • login_view : gère la connexion de l'utilisateur en utilisant le formulaire d'authentification intégré AuthenticationForm.
  • logout_view : déconnecte l'utilisateur avec la fonction logout de Django.

3. Configurer les URL

Ajoutez des chemins pour ces vues dans le fichier urls.py de votre application users.

urls.py

# users/urls.py
from django.urls import path
from . import views

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

N'oubliez pas d'inclure les URL de l'application users dans le fichier urls.py principal du projet :

# mysite/urls.py
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('users/', include('users.urls')),
    path('', include('blog.urls')),  # Par exemple pour votre application principale
]

4. Créer les templates HTML pour l'inscription et la connexion

Créez les templates pour l'inscription (register.html) et la connexion (login.html).

register.html

<!-- users/templates/users/register.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Inscription</title>
</head>
<body>
    <h2>Créer un compte</h2>
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">S'inscrire</button>
    </form>
</body>
</html>

login.html

<!-- users/templates/users/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>
</body>
</html>

5. Ajouter des boutons de connexion/déconnexion dans le template de navigation

Modifiez votre fichier base.html ou le template principal de votre projet pour afficher les boutons de connexion ou de déconnexion en fonction de l'état de connexion de l'utilisateur.

base.html

<!-- Exemple d'un navbar dans le template de base -->
<!DOCTYPE html>
<html>
<head>
    <title>Mon site</title>
</head>
<body>
    <nav>
        <ul>
            {% if user.is_authenticated %}
                <li><a href="{% url 'logout' %}">Se déconnecter</a></li>
            {% else %}
                <li><a href="{% url 'login' %}">Se connecter</a></li>
                <li><a href="{% url 'register' %}">S'inscrire</a></li>
            {% endif %}
        </ul>
    </nav>

    <!-- Contenu principal -->
    <div>
        {% block content %}
        {% endblock %}
    </div>
</body>
</html>

6. Rediriger les utilisateurs après connexion et déconnexion

  • Après une connexion réussie, les utilisateurs sont redirigés vers la page d'accueil (home).
  • Après une déconnexion, les utilisateurs sont également redirigés vers la page d'accueil.

Ces redirections sont déjà gérées dans les vues login_view et logout_view par les appels à redirect.

7. Tester l'application

Lancez le serveur de développement et testez les fonctionnalités :

python manage.py runserver
  • Accédez à http://127.0.0.1:8000/users/register/ pour créer un nouveau compte.
  • Accédez à http://127.0.0.1:8000/users/login/ pour vous connecter.
  • Après connexion, vous devriez voir un bouton "Se déconnecter" dans la barre de navigation.

Ajouter un commentaire

Veuillez vous connecter pour ajouter un commentaire.

Pas encore de commentaires.