Реализация аутентификации и авторизации пользователей в Django

Аутентификация пользователя гарантирует, что пользователи могут безопасно входить в систему и получать доступ к своим аккаунтам. Авторизация, с другой стороны, определяет, какие действия разрешено выполнять аутентифицированным пользователям. Django предоставляет надежную систему аутентификации, которую легко интегрировать и расширять для этих целей.

Настройка системы аутентификации по умолчанию

Система аутентификации Django по умолчанию включена в его конфигурацию по умолчанию. Убедитесь, что следующие приложения указаны в разделе INSTALLED_APPS вашего settings.py:

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

Перенесите базу данных, чтобы настроить необходимые таблицы:

python manage.py migrate

Создание модели пользователя

Django предоставляет встроенную модель пользователя, но вы можете создать собственную, если это необходимо. Чтобы использовать модель по умолчанию:

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

Чтобы создать пользовательскую модель, измените файл 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)

Обновите настройку AUTH_USER_MODEL в settings.py:

AUTH_USER_MODEL = 'yourapp.CustomUser'

Обработка входа и выхода пользователя

Django предоставляет встроенные представления для входа и выхода. Добавьте следующие URL-адреса в ваш 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'),
]

Создайте простой шаблон входа с именем registration/login.html:

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

Ограничение доступа с помощью разрешений

Django предоставляет классы разрешений для ограничения доступа. Чтобы использовать их в представлениях:

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

Разрешения можно назначить с помощью администратора Django или через оболочку:

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)

Заключение

Система аутентификации и авторизации Django обеспечивает надежную основу для защиты ваших веб-приложений. Она легко настраивается, что позволяет вам расширять ее функциональность для удовлетворения конкретных требований. С помощью этой системы вы можете легко управлять учетными записями пользователей, ролями и разрешениями в ваших проектах.