DRF - Использование пользовательского класса разрешений в качестве класса разрешений по умолчанию

В моем проекте django я создал приложение под названием 'base', в котором файлы структурированы следующим образом:

backend
  |
  |--app (created via startproject)
  |   |
  |   |--settings.py
  |
  |--base (created via startapp)
      |
      |--permissions
      |       |
      |       |--init.py
      |       |
      |       |--IsActivatedAccount.py
      |
      |--views
      |--serializers
      

Как вы можете видеть, я создал пакет 'permissions', в котором я создал пользовательский класс разрешения под названием 'IsActivatedAccount'. Вот как выглядят файлы:

init.py:

from .IsActivatedAccount import *

IsActivatedAccount.py:

from rest_framework.permissions import BasePermission

from ..models import *


class IsActivatedAccount(BasePermission):
    message = 'Email verification pending'

    def has_permission(self, request, view):
        return request.user.status != User.Status.PENDING_ACTIVATION

Теперь я пытаюсь использовать это разрешение в качестве класса разрешения по умолчанию в сочетании с IsAuthenticated классом разрешения из django-rest-framework. Вот как я добавил его в settings.py проекта.

settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
        'base.permissions.IsAccountActivated',
    ],
}

Из-за 'base.permissions.IsAccountActivated' сервер не запускается и вот ошибка, которую я получаю:

Exception in thread django-main-thread:
Traceback (most recent call last):
  File "/home/mouli/.local/share/virtualenvs/backend-yIk9pObI/lib/python3.8/site-packages/django/utils/module_loading.py", line 30, in import_string
    return cached_import(module_path, class_name)
  File "/home/mouli/.local/share/virtualenvs/backend-yIk9pObI/lib/python3.8/site-packages/django/utils/module_loading.py", line 16, in cached_import
    return getattr(modules[module_path], class_name)
AttributeError: module 'base.permissions' has no attribute 'IsAccountActivated'
.
.
.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  .
  .
  .
  File "/home/mouli/.local/share/virtualenvs/backend-yIk9pObI/lib/python3.8/site-packages/rest_framework/schemas/__init__.py", line 34, in <module>
    permission_classes=api_settings.DEFAULT_PERMISSION_CLASSES,
  File "/home/mouli/.local/share/virtualenvs/backend-yIk9pObI/lib/python3.8/site-packages/rest_framework/settings.py", line 225, in __getattr__
    val = perform_import(val, attr)
  File "/home/mouli/.local/share/virtualenvs/backend-yIk9pObI/lib/python3.8/site-packages/rest_framework/settings.py", line 168, in perform_import
    return [import_from_string(item, setting_name) for item in val]
  File "/home/mouli/.local/share/virtualenvs/backend-yIk9pObI/lib/python3.8/site-packages/rest_framework/settings.py", line 168, in <listcomp>
    return [import_from_string(item, setting_name) for item in val]
  File "/home/mouli/.local/share/virtualenvs/backend-yIk9pObI/lib/python3.8/site-packages/rest_framework/settings.py", line 180, in import_from_string
    raise ImportError(msg)
ImportError: Could not import 'base.permissions.IsAccountActivated' for API setting 'DEFAULT_PERMISSION_CLASSES'. ImportError: Module "base.permissions" does not define a "IsAccountActivated" attribute/class.

Как я могу исправить это, чтобы я мог использовать мой пользовательский класс разрешений как класс разрешений по умолчанию?

Вернуться на верх