Implementazione dell'autenticazione e dell'autorizzazione utente in Django

L'autenticazione utente garantisce che gli utenti possano effettuare il login e accedere ai propri account in modo sicuro. L'autorizzazione, d'altro canto, determina quali azioni gli utenti autenticati sono autorizzati a eseguire. Django fornisce un sistema di autenticazione robusto che è facile da integrare ed estendere per questi scopi.

Impostazione del sistema di autenticazione predefinito

Il sistema di autenticazione predefinito di Django è incluso nella sua configurazione di default. Assicurati che le seguenti app siano elencate nella sezione INSTALLED_APPS del tuo settings.py:

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

Migrare il database per impostare le tabelle necessarie:

python manage.py migrate

Creazione di un modello utente

Django fornisce un modello utente incorporato, ma puoi crearne uno personalizzato se necessario. Per usare il modello predefinito:

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()

Per creare un modello utente personalizzato, modifica 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)

Aggiorna l'impostazione AUTH_USER_MODEL in settings.py:

AUTH_USER_MODEL = 'yourapp.CustomUser'

Gestione dell'accesso e della disconnessione degli utenti

Django fornisce viste integrate per login e logout. Aggiungi i seguenti URL al tuo 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'),
]

Crea un semplice modello di login denominato registration/login.html:

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

Limitare l'accesso con le autorizzazioni

Django fornisce classi di autorizzazione per limitare l'accesso. Per utilizzarle nelle viste:

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')

I permessi possono essere assegnati tramite l'amministrazione di Django o tramite la 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)

Conclusione

Il sistema di autenticazione e autorizzazione di Django fornisce una solida base per proteggere le tue applicazioni web. È altamente personalizzabile, consentendoti di estendere la sua funzionalità per soddisfare requisiti specifici. Con questo sistema, puoi gestire facilmente account utente, ruoli e permessi nei tuoi progetti.