Django fournit plusieurs vues permettant de gérer la connexion, la déconnexion et le traitement des mots de passe.
Nous aurons seulement à créer les templates, toute le reste de la logique est déjà implémentée par Django.
Pour les utiliser, il faut ajouter la route accounts
dans le fichier urls.py
du projet.
urlpatterns = [ path('admin/', admin.site.urls), path('blogue/', include("blogue.urls")), path('accounts/', include('django.contrib.auth.urls')), ]
Cela comprendra les modèles d’URL suivants
accounts/login/ [name='login'] accounts/logout/ [name='logout'] accounts/password_change/ [name='password_change'] accounts/password_change/done/ [name='password_change_done'] accounts/password_reset/ [name='password_reset'] accounts/password_reset/done/ [name='password_reset_done'] accounts/reset/<uidb64>/<token>/ [name='password_reset_confirm'] accounts/reset/done/ [name='password_reset_complete']
Il faut ensuite créer les templates
que l'on souhaite utiliser.
Dans le fichier de settings.py
, ajouter le chemin où vont se trouver les templates
de login, logout, traitement des mots de passe…
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [str(BASE_DIR.joinpath('templates'))], 'APP_DIRS': True,
Créer les dossiers templates/registration
directement à la racine du projet.
C'est dans ce dossier que l'on crée les fichiers login.html
, logout.html
, password_change
…
Pour le moment, on utilise seulement un fichier login.html
La vue Login est accessible avec l'url http://127.0.0.1:8000/accounts/login/
Exemple de fichier login.html
<form method="post"> {% csrf_token %} {{ form.as_p }} <button class="btn btn-primary" type="submit"> Soumettre </button> </form>
Dans le fichier settings.py
, vous pouvez changer les valeurs par défaut de quelques constantes :
LOGIN_REDIRECT_URL
¶
Valeur par défaut : '/accounts/profile/'
Si un utilisateur se connecte, il est redirigé par défaut sur la page accounts/profile/
Si vous n'avez pas de page profile, vous pouvez le rediriger sur la page d'accueil par exemple
LOGIN_REDIRECT_URL = '/'
LOGIN_URL
¶
Valeur par défaut : '/accounts/login/'
L’URL ou le motif d’URL nommé vers lequel seront redirigées les requêtes pour la connexion.
LOGOUT_REDIRECT_URL
¶
Valeur par défaut : None
L’URL ou le motif d’URL nommé vers lequel seront redirigées les requêtes après la déconnexion. Avec None, aucune redirection n’est effectuée et la vue de déconnexion logout sera produite.
Si vous souhaitez rediriger vers la page de login par exemple :
LOGOUT_REDIRECT_URL = '/accounts/login/'
Dans un gabarit, pour vérifier si un utilisateur est connecté :
{% if user.is_authenticated %} <p>Welcome, {{ user.username }}. Thanks for logging in.</p> {% else %} <p>Welcome, new user. Please log in.</p> {% endif %}
La manière directe de limiter l’accès à certaines pages dans views.py
est de vérifier request.user.is_authenticated
et de rediriger l’utilisateur vers la page de connexion le cas échéant :
from django.conf import settings from django.shortcuts import redirect def my_view(request): if not request.user.is_authenticated: return redirect('login') # ...
…ou d’afficher un message d’erreur :
from django.shortcuts import render def my_view(request): if not request.user.is_authenticated: return render(request, 'myapp/login_error.html') # ...
Si vous démarrez un nouveau projet, il est fortement recommandé de définir un modèle d’utilisateur personnalisé, même si le modèle User
par défaut convient à vos besoins. Ce modèle se comportera comme le modèle d’utilisateur par défaut, mais vous serez en mesure de le personnaliser plus tard si le besoin devait se présenter.
Il faut mettre en place cette configuration au démarrage d'un nouveau projet, avant de faire la première migration.
from django.contrib.auth.models import AbstractUser class User(AbstractUser): pass
Dans le fichier settings.py
, définir le modèle à utiliser pour la gestion des utilisateurs. Exemple :
AUTH_USER_MODEL = 'blogue.User'
Il y aura maintenant une table blogue_user
dans la base de données qui sera utilisée par Django pour la gestion des utilisateurs.
De plus, inscrivez le modèle dans le fichier admin.py de l’application :
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import User admin.site.register(User, UserAdmin)
la gestion des utilisateurs est maintenant dans la partie Blogue de l'administration.