2017-04-13 65 views
1

假设使用person模型,ModelSerializer和相应ReadOnlyModelViewSet的最小应用程序。请求/person/1响应时在数据库自定义NotFound异常--- Django REST框架

只有一个项目存在这样正确的是:

{ 
    "name": "RandomName1" 
} 

当请求/person/2的回应是:

{ 
    "detail": "Not found." 
} 

我想定制的。

尽管我读了documentation,但我不清楚该如何定制此功能。

我应该澄清,我正在寻找定制这个,根据该观点。例如/person/2应该返回:

{ 
    "detail": "Person 2 was not found." 
} 

/address/3应该返回:

{ 
    "detail": "Address 3 was not found." 
} 

回答

3

这听起来像你想处理其中有一个404个状态码响应。修改例如从链接文件:

from rest_framework.views import exception_handler 

def custom_exception_handler(exc, context): 
    response = exception_handler(exc, context) 

    if response.data['status_code'] == 404: 
     try: 
      response.data['detail'] = "{name} {id} was not found.".format(
       name=context['view'].verbose_name, 
       id=context['kwargs']['id'] # this may need tweaking 
      ) 
     except AttributeError: 
      pass 

    return response 

然后添加相应的verbose_name到您的视图。

+0

谢谢你的回答。当我要求'/ person/2'时,我得到一个'404 Not Found'状态码**不是** 401。 – Demetris

+0

谢谢。但是,这是一个通用的'404'吗?我正在寻找特定的每个视图。我道歉,我没有在我原来的问题中包含这个。我已经做了更新以反映这一点。 – Demetris

+0

@ ivan-semochkin好的建议。 @Demetris您可以将自定义消息添加为视图方法,然后调用'context ['view']。get_custom_message()'。 – nimasmi

相关问题