我对数据库字段有唯一约束。提交副本时,我希望避免发送500响应。如何在DRF中捕获此错误并返回4XX响应?
答案 0 :(得分:3)
我知道我需要尝试一下try / except块,但我不知道是什么。我查看了DRF代码,我看到了generics.ListCreateAPIView有一个名为 create 的方法。我在我的类中编写了一个名为parent create 的新函数,该函数与我继承的函数具有相同的签名,称为 create ,我将try / except放在此处功能
最后它看起来像这样:
class MyModelList(generics.ListCreateAPIView):
def get_queryset(self):
return MyModel.objects.all()
def create(self, request, *args, **kwargs):
try:
return super(MyModelList, self).create(request, *args, **kwargs)
except IntegrityError:
raise CustomUniqueException
serializer_class = MyModelSerializer
我希望这有助于某人。
答案 1 :(得分:1)
如果您希望此仅适用于此视图覆盖handle_exception
:
class MyAPIView(APIView):
...
def handle_exception(self, exc):
"""
Handle any exception that occurs, by returning an appropriate
response,or re-raising the error.
"""
...
要为所有视图处理它,您可以定义全局异常处理程序,请参阅此处:http://www.django-rest-framework.org/api-guide/exceptions