Implémentation de l'authentification et de l'autorisation des utilisateurs dans Django

L'authentification des utilisateurs garantit que les utilisateurs peuvent se connecter et accéder à leurs comptes en toute sécurité. L'autorisation, quant à elle, détermine les actions que les utilisateurs authentifiés sont autorisés à effectuer. Django fournit un système d'authentification robuste, facile à intégrer et à étendre à ces fins.

Configuration du système d'authentification par défaut

Le système d'authentification par défaut de Django est inclus dans sa configuration par défaut. Assurez-vous que les applications suivantes sont répertoriées dans la section INSTALLED_APPS de votre settings.py:

'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

Migrer la base de données pour configurer les tables nécessaires:

python manage.py migrate

Créer un modèle d'utilisateur

Django fournit un modèle utilisateur intégré, mais vous pouvez en créer un personnalisé si nécessaire. Pour utiliser le modèle par défaut:

from django.contrib.auth.models import User

# Creating a new user
user = User.objects.create_user(username='johndoe', password='securepassword')
user.email = 'johndoe@example.com'
user.save()

Pour créer un modèle utilisateur personnalisé, modifiez votre models.py:

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    phone_number = models.CharField(max_length=15, blank=True, null=True)

Mettez à jour le paramètre AUTH_USER_MODEL dans settings.py:

AUTH_USER_MODEL = 'yourapp.CustomUser'

Gestion de la connexion et de la déconnexion des utilisateurs

Django fournit des vues intégrées pour la connexion et la déconnexion. Ajoutez les URL suivantes à votre urls.py:

from django.urls import path
from django.contrib.auth import views as auth_views

urlpatterns = [
    path('login/', auth_views.LoginView.as_view(), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]

Créez un modèle de connexion simple nommé registration/login.html:

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Log in</button>
</form>

Restreindre l'accès avec des autorisations

Django fournit des classes d'autorisation pour restreindre l'accès. Pour les utiliser dans les vues:

from django.contrib.auth.decorators import login_required, permission_required

@login_required
def dashboard(request):
    return render(request, 'dashboard.html')

@permission_required('yourapp.can_edit')
def edit_page(request):
    return render(request, 'edit_page.html')

Les autorisations peuvent être attribuées à l'aide de l'administrateur Django ou via le shell:

from django.contrib.auth.models import User, Permission

user = User.objects.get(username='johndoe')
permission = Permission.objects.get(codename='can_edit')
user.user_permissions.add(permission)

Conclusion

Le système d'authentification et d'autorisation de Django constitue une base solide pour sécuriser vos applications Web. Il est hautement personnalisable, ce qui vous permet d'étendre ses fonctionnalités pour répondre à des exigences spécifiques. Grâce à ce système, vous pouvez facilement gérer les comptes utilisateurs, les rôles et les autorisations dans vos projets.