Implementera användarautentisering och auktorisering i Django

Användarautentisering säkerställer att användare säkert kan logga in och komma åt sina konton. Auktorisering, å andra sidan, avgör vilka åtgärder autentiserade användare tillåts utföra. Django tillhandahåller ett robust autentiseringssystem som är lätt att integrera och utöka för dessa ändamål.

Konfigurera standardautentiseringssystemet

Djangos standardautentiseringssystem ingår som standard i dess konfiguration. Se till att följande appar är listade i avsnittet INSTALLED_APPS i din settings.py:

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

Migrera databasen för att skapa de nödvändiga tabellerna:

python manage.py migrate

Skapa en användarmodell

Django tillhandahåller en inbyggd användarmodell, men du kan skapa en anpassad om det behövs. Så här använder du standardmodellen:

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

För att skapa en anpassad användarmodell, ändra din 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)

Uppdatera AUTH_USER_MODEL inställningen i settings.py:

AUTH_USER_MODEL = 'yourapp.CustomUser'

Hantera användarinloggning och utloggning

Django tillhandahåller inbyggda vyer för inloggning och utloggning. Lägg till följande webbadresser till din 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'),
]

Skapa en enkel inloggningsmall med namnet registration/login.html:

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

Begränsa åtkomst med behörigheter

Django tillhandahåller behörighetsklasser för att begränsa åtkomst. Så här använder du dem i vyer:

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

Behörigheter kan tilldelas med hjälp av Django-admin eller genom skalet:

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)

Slutsats

Djangos autentiserings- och auktoriseringssystem ger en solid grund för att säkra dina webbapplikationer. Den är mycket anpassningsbar, vilket gör att du kan utöka dess funktionalitet för att möta specifika krav. Med det här systemet kan du enkelt hantera användarkonton, roller och behörigheter i dina projekt.