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.
Как я могу исправить это, чтобы я мог использовать мой пользовательский класс разрешений как класс разрешений по умолчанию?