Расположение обработчика исключений фреймворка Django Rest - PullRequest
0 голосов
/ 12 ноября 2018

В Документах DRF говорится, что после настройки обработчика исключений его необходимо определить в settings.py следующим образом:

REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'my_project.my_app.utils.custom_exception_handler'
}

Мой макет проекта Django похож наthis:

backend
    settings.py
    connectivity_service
        utils
            Custom404ErrorMessage.py

Проект называется backend, а имя приложения - Connectivity_service. Файл Custom404ErrorMessage.py содержит функцию custom_exception_handler , которая обрабатывает исключение.

Mysettings.py выглядит следующим образом:

REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'backend.connectivity_service.utils.Custom404ErrorMessage'
}

Однако, это дает мне следующее сообщение об ошибке:

ImportError: Could not import 'backend.connectivity_service.utils.Custom404ErrorMessage' 
for API setting 'EXCEPTION_HANDLER'. ModuleNotFoundError: No module named 
'backend.connectivity_service'.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Я предполагаю, что вы перепутали текст при переводе примера DRF в ваш код. Состояние документов:

from rest_framework.views import exception_handler

def custom_exception_handler(exc, context):
# Call REST framework's default exception handler first,
# to get the standard error response.
response = exception_handler(exc, context)

# Now add the HTTP status code to the response.
if response is not None:
    response.data['status_code'] = response.status_code

return response

Затем он скажет вам добавить его в ваши настройки как:

REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'my_project.my_app.utils.custom_exception_handler'
}

Имейте в виду, что приведенный выше пример имеет следующую структуру папок:

my_project> my_app> utils> custom_exception_handler

Что означает:

my_project_FOLDER> my_app_FOLDER> utils.PY> NAME_OF_DEFINED_FUNCTION_THAT_HANDLES_EXCEPTIONS

Вот как я думаю, вы могли запутаться. Таким образом, у вас есть Custom404ErrorMessage.py внутри utils_FOLDER и вы пытаетесь импортировать его вместо самой определенной функции. Если, конечно, Custom404ErrorMessage.py - это класс, но я сомневаюсь в этом, поскольку вы, похоже, следовали связанному примеру DRF, в котором используется функция.

Я предполагаю, что ваш Custom404ErrorMessage.py имеет следующее:

from rest_framework.views import exception_handler

def custom_exception_handler(exc, context):
....

Так что для вашей настройки ваш settings.py будет выглядеть так:

REST_FRAMEWORK = {
 'EXCEPTION_HANDLER': 'backend.connectivity_service.utils.Custom404ErrorMessage.custom_exception_handler'
 }

Видите, как последняя часть является определенной функцией? Надеюсь, это поможет!

0 голосов
/ 15 декабря 2018

У меня тоже была эта проблема, и что вам нужно сделать, это решить:

  1. создать utils.py внутри папки вашего приложения
  2. определите вашу функцию custom_exception_handler внутри нее
  3. в вашем файле настроек добавьте это «EXCEPTION_HANDLER: my_app.utils.custom_exception_handler», нет необходимости вводить my_project
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...