Курс Python → Декоратор для группы пользователей в Django

Для защиты определенных вьюшек и предоставления доступа только определенной группе пользователей в Django, можно использовать декоратор @group_required. Этот декоратор позволяет нам определить список групп, которым требуется доступ к определенной вьюшке. Вместо того, чтобы вручную проверять принадлежность пользователя к определенной группе в каждой вьюшке, можно просто применить этот декоратор к нужным представлениям.

Для создания декоратора @group_required в Django, можно использовать следующий код:


from django.contrib.auth.decorators import user_passes_test

def group_required(*group_names):
    def in_groups(user):
        if user.is_authenticated:
            if bool(user.groups.filter(name__in=group_names)) | user.is_superuser:
                return True
        return False
    return user_passes_test(in_groups)

В этом коде мы создаем функцию group_required, которая принимает список названий групп в качестве аргументов. Затем мы определяем функцию in_groups, которая проверяет, принадлежит ли пользователь к одной из указанных групп или является ли он суперпользователем. В конечном итоге, функция user_passes_test возвращает результат проверки на принадлежность к группе.

Применение декоратора @group_required к вьюшкам в Django выглядит следующим образом:


from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .decorators import group_required

@login_required
@group_required('admin', 'editor')
def protected_view(request):
    return render(request, 'protected_view.html')

В этом примере мы применяем декораторы @login_required и @group_required('admin', 'editor') к вьюшке protected_view, что означает, что только аутентифицированные пользователи, принадлежащие к группам ‘admin’ или ‘editor’, могут получить доступ к этой вьюшке.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Библиотека Rich: форматирование текста
  2. Принципы программирования
  3. Работа с JSON в Python
  4. Python и Юникод: работа с цифрами
  5. Отрицательные индексы списков
  6. Протокол управления контекстом
  7. Генератор бросков кубиков
  8. Отправка HTTP-запросов в Python
  9. Сравнение строк в Python
  10. Форматирование строк в Python
  11. Функция zip() в Python
  12. Метаклассы в Python
  13. Метод join() для объединения элементов в строку.
  14. Метод splitlines() для разделения строк
  15. Переопределение метода len
  16. Генератор данных в Keras
  17. Транспонирование 2D-массива с помощью zip
  18. Установка и использование Virtualenv
  19. Объединение кортежей в Python
  20. Python-dateutil — работа с датами
  21. Именованные срезы в Python
  22. Модуль math: константы π и e
  23. Проверка типа данных
  24. Python reversed() vs срез[::-1]
  25. Работа со строками в Python
  26. Очистка строки в Python
  27. Аргументы *args и **kwargs
  28. Настройка Cron
  29. Получение списка файлов в директории с использованием os
  30. Конвертация коллекций в Python.
  31. TON Smart Challenge #2: участие и подготовка
  32. Область видимости переменных в Python
  33. Замыкания в Python
  34. Контроль точности вывода чисел
  35. Именование переменных в Python
  36. Принципы LSP и ISP в Python
  37. Проверка однородности элементов списка
  38. Применение команды break
  39. Метод __ixor__ для побитового исключающего ИЛИ
  40. Декодирование строк в Python
  41. Сортировка в Python
  42. Подсчет часто встречающихся элементов
  43. Чтение и запись TOML-конфигов
  44. Удаление дубликатов из списка
  45. Добавление элементов в список: append() vs extend()
  46. Работа с атрибутом dict
  47. Управление памятью в numpy.

Marketello читают маркетологи из крутых компаний