DRF文档说,一旦设置了异常处理程序,就需要在 settings.py 中对其进行定义,如下所示:
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'my_project.my_app.utils.custom_exception_handler'
}
我的Django项目布局如下:
backend
settings.py
connectivity_service
utils
Custom404ErrorMessage.py
该项目称为后端,应用程序名称为Connectivity_service。Custom404ErrorMessage.py文件包含用于处理异常的功能 custom_exception_handler 。
我的settings.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'.
我在做什么错了?
答案 0 :(得分:2)
我的猜测是,当您从DRF example转换为代码时,您会混淆文本。文档状态:
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
这就是我认为您可能会感到困惑的方式。因此,您在 utils_FOLDER 中有Custom404ErrorMessage.py
,并试图导入它而不是定义的函数本身。当然,除非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'
}
看看最后一部分是定义的函数吗?希望有帮助!
答案 1 :(得分:1)
我也遇到了这个问题,您需要做的是解决这个问题: