从嵌套函数“Django REST framework”传递响应

To pass the Response from the nested function `Django REST framework`

我正在使用 python django 和 Django REST framework

可以return这样对浏览器的响应,在views.py

from rest_framework.response import Response
    @api_view(['GET'])
    def get_by(request):
        res = {"test":"answer"}
        return Response(res)

我想将 Response 传递给嵌套函数所在的浏览器

from rest_framework.response import Response
    @api_view(['GET'])
    def get_by(request):
        x(t)

def x():
   #error happens here!!
    res = {"error":"error happens!!"}
    return Response(res)

在这种情况下,很简单,我可以return第一个函数的错误,第一个函数可以return错误的响应。

但是当你有三四五嵌套函数时?

最佳做法是什么?

最好使用序列化程序或服务并对其进行一些验证。

https://www.django-rest-framework.org/api-guide/serializers/#validation

另一方面,您可以开发一些自定义的 APIExcepetion 并引发它们。

https://www.django-rest-framework.org/api-guide/exceptions/#api-reference

如前一个答案所述,您可以在函数内部使用自定义 APIException 来中途停止 api 处理程序。如果你不希望它像系统错误一样return,你可以像下面的例子一样设置响应状态代码:

from rest_framework.exceptions import APIException
from rest_framework import status

class OkException(APIException):
    status_code = status.HTTP_200_OK
    default_detail = "error happens!!"
    default_code = "error_happens"

然后您可以像普通异常一样在函数内部引发它

raise OkException()